我想更改Android中微调器中显示的所选项目的颜色(目标是API级别16及以上)。我已尝试在SO上发布了几个解决方案,包括为我的微调器项创建自定义布局,并使用ColorStateList作为自定义布局的文本颜色属性,但无济于事。微调器显示在半透明背景上 - 因此项目的自定义布局不起作用,因为它为微调器添加了颜色。目前我的黑客解决方案是
if (_colorCodeSpinner.getSelectedView() != null) {
((TextView) _colorCodeSpinner.getSelectedView()).setTextColor(0xFFFFFFFF);
}
但这仅在所选视图不为空(它在方向更改时)时有效。
我无法相信没有一个简单的解决方案来设置文本颜色。这似乎是你经常做的事情。改变箭头的颜色也是如此,我目前通过
来做_colorCodeSpinner.getBackground().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
我错过了什么吗?更改微调器上颜色的推荐方法是什么?
如图所示,微调器中显示的所选项目的文本颜色为黑色,但我想将其更改为白色。
修改
澄清一下:我没有找到一些在运行时覆盖值的小代码(比如我在这个问题中发布的两个片段)。我正在寻找一种正确的方法(比如在XML布局中或通过主题)。要设置文本颜色属性一次,我不必每次都更新它。选择一个项目。
答案 0 :(得分:5)
这样做:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE); /* if you want your item to be white */
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
答案 1 :(得分:2)
这对你有用
public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
item = (String) parent.getItemAtPosition(arg2);
((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
}
或强>
你可以使用选择器来改变颜色
创建一个名为my_selctor.xml的xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="black" /> <!-- pressed -->
<item android:state_focused="true"
android:color="black" /> <!-- focused -->
<item android:color="white" /> <!-- default -->
</selector>
并在您的文字视图中设置它就像这样
<TextView ...........
android:textColor=""@drawable/my_selctor"/>
答案 2 :(得分:1)
try the following code:-
XML:-
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_margin="20dp"
android:popupBackground="#ffffff"
android:layout_height="match_parent">
</Spinner>
create a another xml for the 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="match_parent"
android:text="dshsgv"
android:padding="5dp"
android:textColor="#000000">
</TextView>
then in your activity:-
public class MainActivity extends AppCompatActivity {
Spinner spinner;
String[] cat = {"Automobile", "Automobile"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adpter = new ArrayAdapter<String> (MainActivity.this, R.layout.text, cat);
spinner.setAdapter(adpter);
}
}
答案 3 :(得分:1)
您可以实现此编辑styles.xml布局文件。对于这个答案,我使用Android Studio中的新项目,使用minSdkVersion 16和AppCompatSpinner。
styles.xml布局:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:spinnerItemStyle">@style/mySpinnerItemSelectedStyle</item>
</style>
<style name="mySpinnerItemSelectedStyle" parent="@android:style/Widget.Holo.TextView.SpinnerItem">
<item name="android:textColor">@color/spinnerTextColor</item>
</style>
并在colors.xml文件中添加:
<color name="spinnerTextColor">#ffffff</color>
解决方案取自以下链接。虽然它用于颜色微调器下拉项目,但大多采用相同的方法。
答案 4 :(得分:0)
关注此link
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(12);
}
public void onNothingSelected(AdapterView<?> parent) {
}
};
答案 5 :(得分:0)
你可以这样使用。这将更改DropDown
菜单的图标。
spinner.getBackground().setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP);
然后使用TextView
制作一个spinner_text.xml
版面名称
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerText"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee"
android:textColor="#fff" />
并将此代码写入您的MainActivity.java
类,如
List<String> categories = new ArrayList<String>();
categories.add("Automobile");
categories.add("Business Services");
categories.add("Computers");
categories.add("Education");
categories.add("Personal");
categories.add("Travel");
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.spinner_text, categories);
spinner.setAdapter(adapter);
spinner.getBackground().setColorFilter(ContextCompat.getColor(this,R.color.white), PorterDuff.Mode.SRC_ATOP);
// attaching data adapter to spinner
spinner.setAdapter(adapter);