如何更改微调器的文字大小和文字颜色?

在我的Android应用程序中,我使用微调,并从SQLite数据库加载数据到微调,它正常工作。 这是这个代码。

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文件中使用了以下XML行到我的微调标签,但它不工作。

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

我怎样才能改变我的微调的文字颜色和文字大小?

为您的微调项目制作一个自定义的XML文件。

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在微调器中显示你的项目。

简单而清脆…:

 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) { } }; 

如果所有的spinners对于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 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的自定义定义创build您自己的布局文件:

 <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" /> 

如果您想自定义下拉列表项目,您将需要创build一个新的布局文件。 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侦听器中设置文本属性,还需要在Activity的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) { } }); } 

有关更多详情,请参阅我的问题 。

而不是做一个自定义的布局,以获得一个小尺寸,如果你想使用Android的内部小型布局的微调,你应该使用:

“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); 

它可以减less微调的布局的大小。 这只是一个简单的伎俩。

如果你想减小下拉列表的大小,使用这个:

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

最简单:适用于我

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

如果您只想在所选项目中更改文字颜色,那么这可能是一种可能的解决方法。 它为我工作,也应该为你工作。

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

重用/更改android.R.layout资源的最简单方法就是定义。 在Android Studio中,在android.R.layout.simple_spinner_item.xml中执行Ctrl + B。

它会带你到资源文件。 只需复制资源文件并在Package.R.layout文件夹中添加一个新的布局,然后根据需要更改textview的textColor,然后像这样在适配器中调用它:

 ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist); 
 <?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); 

首先,我们必须为textview创build简单的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" /> 

并保存。 设置在您的适配器列表后。

Ashraf解决scheme的另一个变体是确保您考虑到屏幕尺寸。 您需要在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) { } }; 

所有你需要做的是创build布局特定的文件夹,如下所示:

价值观sw360dp

价值观sw600dp

价值观sw800dp

然后在每个文件夹中添加一个名为“bool.xml”的xml文件:

 <?xml version="1.0" encoding="utf-8"?> <resources> <bool name="isTablet">false</bool> <bool name="isLargeTablet">false</bool> </resources> 

我做了如下。我已经使用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()closures微调。

 @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);