更改 Holo Spinner 文本颜色

8
我在一个Holo主题对话框中使用了一个旋转选择器,由于其文字颜色非常难读,因此我希望更改其文字颜色。我已经查看了android styles.xml以及许多其他答案,并相信我正确地设置了自定义样式;但它就是没有被选中。以下是对话框布局文件的摘录,其中包含旋转选择器:
<Spinner
        android:id="@+id/spn_Type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:entries="@array/dose_type_options"
        style="@style/DialogSpinner" />

这些是位于 values-v14 文件夹中 styles.xml 文件的相关条目:

<style name="DialogSpinner" parent="@android:style/Widget.Holo.Spinner">
        <item name="android:spinnerItemStyle">@style/MySpinnerItem</item>
</style>

<style name="MySpinnerItem" parent="android:Widget.Holo.TextView.SpinnerItem">
    <item name="android:textAppearance">@style/MyTextAppearanceSpinnerItem</item>
</style>

<style name="MyTextAppearanceSpinnerItem" parent="android:TextAppearance.Holo.Widget.TextView.SpinnerItem">
    <item name="android:textColor">#FFF</item>
</style>

对话框本身通过使用以下方式强制为Holo暗色主题:
<style name="FibroDialog" parent="@android:style/Theme.Holo.Dialog">

</style>

有人能够确定为什么旋转器文本不是白色吗?

我查看了其他解决方案,建议在代码中更改颜色,但此应用程序支持2.3.*以上版本,因此对于那些非霍洛版本,黑色文本可以接受,因此尝试通过样式来完成它。

谢谢

使用下面Woda的答案进行更新

旋转器初始值的文本颜色现在为白色,这大大突出了用户的旋转器存在:

dialog spinner text colour 2

但是可选择项目的文本颜色仍然是黑色。我猜这不是一个很大的问题,至少通过将初始文本更改为白色证实了旋转器的存在。但我很想知道为什么这些项目仍然是黑色,以及如何将它们更改为白色。

3个回答

5

您是否尝试将SpinnerItemStyle添加到您的主题中?这样,您应用程序中的所有Spinner都将具有相同的样式。我是这样使用它的,并且它有效:

theme.xml:

<style name="exampleTheme" parent="android:Theme.Holo.Light">
    <item name="android:spinnerItemStyle">@style/SpinnerItem_example</item>
    ...
</style>

style.xml:

<style name="SpinnerItem_example" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
        <item name="android:textColor">#000000</item>
</style>

更新: 深入研究styles.xml后,我发现了以下内容:

<style name="Widget.DropDownItem.Spinner">
        <item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item>
</style>

<style name="Widget.DropDownItem">
        <item name="android:textAppearance">@style/TextAppearance.Widget.DropDownItem</item>
        <item name="android:paddingStart">@dimen/dropdownitem_text_padding_left</item>
        <item name="android:paddingEnd">@dimen/dropdownitem_text_padding_right</item>
        <item name="android:gravity">center_vertical</item>
</style>

所以您可能需要自定义Widget.DropDownItem并在您的主题中接受它。

...
<item name="dropDownItemStyle">@android:style/Widget.DropDownItem</item>
...

以下两个链接对我定制应用程序非常有帮助,它们帮助我了解不同视图的结构。这两个文件是Android源代码的一部分。也许它对你也有所帮助。

谢谢,Woda。对我来说已经足够了。请查看上面的更新以了解发生了什么。 - DaveSav
我已经更新了我的答案。不幸的是,我没有时间检查它是否确切地解决了你的问题。 - Woda
不,好像那并没有起作用。但是感谢您最初的回答。 - DaveSav
我是Android的新手,所以我需要知道theme.xml和style.xml文件应该放在哪里?如何应用它们? - Sajitha Rathnayake

4

我通过调用解决了这个问题

mArrayAdapter.setDropDownViewTheme(mActivity.getTheme());

希望这能帮助到某些人;)

0

您可以在代码中访问内部TextView而不更改任何样式。这是我处理启用和禁用下拉菜单的方式。

.getSelectedView()对我不起作用。因此,我欺骗了Spinner以“显示”被禁用。

您需要为“禁用”外观定义自己的颜色。

例如:

R.color.blue_text //means enabled
R.color.gray_text //means disabled

因此,要禁用我的旋转器:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.gray_text));
mySpinner.setEnabled(false);
mySpinner.setFocusable(false);

启用我的Spinner:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.blue_text));
mySpinner.setEnabled(true);
mySpinner.setFocusable(true);

getChildAt(0) 函数允许您访问 Spinner 中的第一个项目,这是您在屏幕上显示为 TextView 的内容。

您无需更改样式或修改任何 XML。只需在您的代码中执行此操作,甚至在事件方法中也可以正常运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接