Как изменить размер шрифта и цвет текста?

В моем приложении для Android я использую spinner, и я загрузил данные из базы данных SQLite в spinner, и он работает правильно. Вот код для этого.

Spinner spinner = (Spinner) this.findViewById(R.id.spinner1); List<String> list = new ArrayList<String>(); ArrayAdapter<String> dataAdapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, list); cursor.moveToFirst(); list.add("All Lists"); if (cursor.getCount() > 0) { for (int i = 0; i < cursor.getCount(); i++) { keyList[i] = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.KEYWORD)); list.add(keyList[i]); cursor.moveToNext(); } } Database.close(); cursor.close(); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(dataAdapter); 

Теперь я хочу изменить цвет текста и размер текста данных прядильщика. Я использовал следующие строки XML для моего тега spinner в своем XML-файле, но он не работает.

 android:textColor="@android:color/white" android:textSize="11dp" 

Как изменить цвет текста и размер текста моего счетчика?

Solutions Collecting From Web of "Как изменить размер шрифта и цвет текста?"

Создайте собственный XML-файл для вашего элемента spinner.

spinner_item.xml:

Дайте свой индивидуальный цвет и размер тексту в этом файле.

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:gravity="left" android:textColor="#FF0000" android:padding="5dip" /> 

Теперь используйте этот файл, чтобы показать свои элементы-счетчики, например:

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,list); 

Вам не нужно устанавливать выпадающий ресурс. Это займет только spinner_item.xml чтобы показать ваши элементы в spinner.

Простой и четкий …:

 private OnItemSelectedListener OnCatSpinnerCL = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { ((TextView) parent.getChildAt(0)).setTextColor(Color.BLUE); ((TextView) parent.getChildAt(0)).setTextSize(5); } public void onNothingSelected(AdapterView<?> parent) { } }; 

Если все прядильщики могут иметь одинаковый цвет текста для своих элементов TextView, другой подход заключается в использовании пользовательского стиля для выпадающих элементов spinner:

В res/values/styles.xml :

 <resources> <style name="AppBaseTheme" parent="android:Theme.Light"> </style> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item> </style> <style name="mySpinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner"> <item name="android:textColor">@color/my_spinner_text_color</item> </style> </resources> 

И определите свой собственный цвет в res / values ​​/ colors.xml:

 <color name="my_spinner_text_color">#808080</color> 

Вот ссылка, которая может помочь вам изменить цвет Spinner :

кликните сюда

 <Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/spinner" android:textSize="20sp" android:entries="@array/planets"/> 

Вам нужно создать свой собственный файл макета с пользовательским определением для элемента spinner spinner_item.xml :

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#ff0000" /> 

Если вы хотите настроить элементы раскрывающегося списка, вам нужно будет создать новый файл макета. Spinner_dropdown_item.xml :

 <?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerDropDownItemStyle" android:maxLines="1" android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:ellipsize="marquee" android:textColor="#aa66cc"/> 

И, наконец, еще одно изменение в декларации спиннера:

 ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, R.layout.spinner_item); adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); spinner.setAdapter(adapter); 

Вот и все.

Чтобы предотвратить отставание, вам необходимо не только установить свойства текста в onItemSelected , но также и в методе onCreate (но это немного сложно).

В частности, вам нужно поместить это в onCreate после установки адаптера:

 spinner.setSelection(0, true); View v = spinner.getSelectedView(); ((TextView)v).setTextColor(backgroundColor); 

И затем положите это в onItemSelected :

 ((TextView) view).setTextColor(backgroundColor); 

Вот полный пример:

 @Override protected void onCreate(Bundle savedInstanceState) { Spinner spinner = (Spinner) findViewById(R.id.spinner); //Set the choices on the spinner by setting the adapter. spinner.setAdapter(new SpinnerAdapter(toolbar.getContext(), new String[]{"Overview", "Story", "Specifications", "Poll", "Video"}, accentColor, backgroundColor)); //Set the text color of the Spinner's selected view (not a drop down list view) spinner.setSelection(0, true); View v = spinner.getSelectedView(); ((TextView)v).setTextColor(backgroundColor); //Set the listener for when each option is clicked. spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { //Change the selected item's text color ((TextView) view).setTextColor(backgroundColor); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } 

Более подробно см. Мой вопрос .

Вместо того, чтобы создавать индивидуальный макет, чтобы получить небольшой размер, и если вы хотите использовать собственный маленький размер LYOUT для Android для счетчика, вы должны использовать:

Msgstr "android.R.layout.simple_gallery_item" вместо "android.R.layout.simple_spinner_item".

 ArrayAdapter<CharSequence> madaptor = ArrayAdapter .createFromResource(rootView.getContext(), R.array.String_visitor, android.R.layout.simple_gallery_item); 

Он может уменьшить размер макета счетчика. Это просто простой трюк.

Если вы хотите уменьшить размер выпадающего списка, используйте это:

 madaptor.setDropDownViewResource(android.R.layout.simple_gallery_item); 

Простейший: работает для меня

 TextView spinnerText = (TextView) spinner.getChildAt(0); spinnerText.setTextColor(Color.RED); 

Самый простой способ повторно использовать / изменить ресурсы android.R.layout – это просто определение. В Android Studio сделайте Ctrl + B на android.R.layout.simple_spinner_item.xml.

Он перенесет вас в файл ресурсов. Просто скопируйте файл ресурсов и добавьте новый макет в папку Package.R.layout и измените textColor textview по своему усмотрению, а затем просто вызовите его в адаптере следующим образом:

 ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist); 

Сначала мы должны создать простой файл ресурсов xml для textview как textview ниже:

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:gravity="left" android:textColor="#FF0000" android:padding="5dip" /> 

И сохранить его. После установки в списке адаптеров.

Еще одним вариантом решения Ashraf было бы убедиться, что вы учитываете размеры экрана. Вам нужно будет получить счетчик в onCreate и установить слушателя после установки адаптера:

 //set your adapter with default or custom spinner cell, then:// serverSpinner.setOnItemSelectedListener(spinnerSelector); serverSpinner.setSelection(defaultServer); 

Затем вы можете начать изменять размер текста представления, которое показывается до щелчка счетчика:

 private AdapterView.OnItemSelectedListener spinnerSelector = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { boolean tabletSize = getResources().getBoolean(R.bool.isTablet); boolean largeTablet = getResources().getBoolean(R.bool.isLargeTablet); if (tabletSize) { ((TextView)parent.getChildAt(0)).setTextSize(16); } else if (largeTablet) { ((TextView)parent.getChildAt(0)).setTextSize(18); } else { ((TextView)parent.getChildAt(0)).setTextSize(12); } } public void onNothingSelected(AdapterView<?> parent) { } }; 

Все, что вам нужно сделать, это создать определенные папки:

Значения-sw360dp

Значения-sw600dp

Значения-sw800dp

Затем добавьте xml-файл с именем «bool.xml» в каждую из этих папок:

 <?xml version="1.0" encoding="utf-8"?> <resources> <bool name="isTablet">false</bool> <bool name="isLargeTablet">false</bool> </resources> 
 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#fff" android:ellipsize="marquee" android:textAlignment="inherit"/> 

Просто используйте это:

 ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this, R.layout.spinner_list_item, categories); adapter_category .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

Я сделал это следующим образом. У меня есть методы getDropDownView () и getView ().

Используйте getDropDownView() для открытого Spinner.

 @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = vi.inflate(R.layout.context_row_icon, null); } TextView mTitle = (TextView) view.findViewById(R.id.context_label); ImageView flag = (ImageView) view.findViewById(R.id.context_icon); mTitle.setText(values[position].getLabel(activity)); if (!((LabelItem) getItem(position)).isEnabled()) { mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled)); } else { mTitle.setTextColor(activity.getResources().getColor(R.color.context_item)); } return view; } 

И используйте getView() для закрытого Spinner.

 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = vi.inflate(R.layout.context_row_icon, null); } TextView mTitle = (TextView) view.findViewById(R.id.context_label); ImageView flag = (ImageView) view.findViewById(R.id.context_icon); mTitle.setText(values[position].getLabel(activity)); mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled)); return view; } 

Для тех, кто хочет изменить цвет DrowDownIcon вы можете использовать это

 spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP); 

Если вы хотите, чтобы цвет текста изменялся только в выбранном элементе, это может быть возможным обходным путем. Это сработало для меня и должно работать и на вас.

 spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE); } });