如何使用 XML 而不是 Java 更改所选微调器项目的颜色?
How can I change the color of the selected spinner item using XML not Java?
我有一个 Android Spinner
并且下拉菜单颜色都可以正常工作,但我无法使用 XML 而不是 [=28] 更改所选项目的文本颜色=].我已经尝试了我能想到的一切。下面是我的代码:
<android.support.v7.widget.AppCompatSpinner
android:layout_width="368dp"
android:layout_height="wrap_content"
android:entries="@array/test"
style="@style/dropdown_text"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="8dp"></android.support.v7.widget.AppCompatSpinner>
以下是我尝试过的所有风格:
<style name="dropdown_text">
<item name="android:background">#000000</item>
<item name="android:textColor">#ffffff</item>
<item name="android:textColorPrimary">#ffffff</item>
<item name="android:textColorSecondary">#ffffff</item>
<item name="android:textAppearance">@style/white_text</item>
</style>
<style name="white_text">
<item name="android:textColor">#ffffff</item>
</style>
背景色效果很好,但文字颜色不行。
那么如何更改所选项目的文本颜色?
谢谢。
编辑:我知道有很多帖子问同样的事情,他们中的大多数人说在 Java 代码中做,但我想在 XML 中做。还有一些展示了你必须改变的风格,但我已经尝试了他们所有的建议,但没有任何效果。
您可以使用此代码
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
TextView selectedText = (TextView)adapterView.getChildAt(0);
if (selectedText != null) {
selectedText.setTextColor(Color.WHITE);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
当您使用 entries
填充 Spinner
时,AppCompatSpinner
will create an ArrayAdapter
and use android.R.layout.simple_spinner_item
作为您的 "selected" 视图。 simple_spinner_item
是使用 spinnerItemStyle
.
样式的 TextView
<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:ellipsize="marquee"
android:textAlignment="inherit"/>
因此,如果您想更改 simple_spinner_item
中的文本颜色,您需要为 spinnerItemStyle
提供您自己的样式。类似于:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:spinnerItemStyle">@style/YourSpinnerItemStyle</item>
</style>
<style name="YourSpinnerItemStyle" parent="Widget.AppCompat.TextView.SpinnerItem">
<item name="android:textColor">@android:color/white</item>
</style>
您也可以使用 textAppearance
而不是 textColor
。
结果:
<item android:state_activated="true"
android:drawable="@color/red"/>
试试这个为所选项目设置颜色
我有一个 Android Spinner
并且下拉菜单颜色都可以正常工作,但我无法使用 XML 而不是 [=28] 更改所选项目的文本颜色=].我已经尝试了我能想到的一切。下面是我的代码:
<android.support.v7.widget.AppCompatSpinner
android:layout_width="368dp"
android:layout_height="wrap_content"
android:entries="@array/test"
style="@style/dropdown_text"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="8dp"></android.support.v7.widget.AppCompatSpinner>
以下是我尝试过的所有风格:
<style name="dropdown_text">
<item name="android:background">#000000</item>
<item name="android:textColor">#ffffff</item>
<item name="android:textColorPrimary">#ffffff</item>
<item name="android:textColorSecondary">#ffffff</item>
<item name="android:textAppearance">@style/white_text</item>
</style>
<style name="white_text">
<item name="android:textColor">#ffffff</item>
</style>
背景色效果很好,但文字颜色不行。
那么如何更改所选项目的文本颜色?
谢谢。
编辑:我知道有很多帖子问同样的事情,他们中的大多数人说在 Java 代码中做,但我想在 XML 中做。还有一些展示了你必须改变的风格,但我已经尝试了他们所有的建议,但没有任何效果。
您可以使用此代码
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
TextView selectedText = (TextView)adapterView.getChildAt(0);
if (selectedText != null) {
selectedText.setTextColor(Color.WHITE);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
当您使用 entries
填充 Spinner
时,AppCompatSpinner
will create an ArrayAdapter
and use android.R.layout.simple_spinner_item
作为您的 "selected" 视图。 simple_spinner_item
是使用 spinnerItemStyle
.
TextView
<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:ellipsize="marquee"
android:textAlignment="inherit"/>
因此,如果您想更改 simple_spinner_item
中的文本颜色,您需要为 spinnerItemStyle
提供您自己的样式。类似于:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:spinnerItemStyle">@style/YourSpinnerItemStyle</item>
</style>
<style name="YourSpinnerItemStyle" parent="Widget.AppCompat.TextView.SpinnerItem">
<item name="android:textColor">@android:color/white</item>
</style>
您也可以使用 textAppearance
而不是 textColor
。
结果:
<item android:state_activated="true"
android:drawable="@color/red"/>
试试这个为所选项目设置颜色