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 的答案进行了更新

微调器初始值的文本颜色现在为白色,这在很大程度上突出了用户有微调器:

对话框微调器文本颜色 2

但是可选项目的文本颜色仍然是黑色。我想这不是什么大不了的事,至少通过将初始文本更改为白色来确认微调器的存在。但我很想知道为什么这些项目仍然是黑色的,以及如何将它们更改为白色。

4

3 回答 3

5

您是否尝试过将 SpinnerItemStyle 接受到您的主题中?因此,您应用中的所有 Spinner 都将具有相同的样式。我像这样使用它并且它有效:

主题.xml:

<style name="exampleTheme" parent="android:Theme.Holo.Light">
    <item name="android:spinnerItemStyle">@style/SpinnerItem_example</item>
    ...
</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 源代码的一部分。也许它也对你有帮助。

于 2013-05-19T20:00:38.060 回答
4

我通过调用修复它

mArrayAdapter.setDropDownViewTheme(mActivity.getTheme());

希望这对某人有帮助;)

于 2017-05-05T16:33:37.637 回答
0

您可以在代码中访问内部 TextView 而无需更改任何样式。这就是我处理启用和禁用微调器的方式

.getSelectedView() 对我不起作用。所以我欺骗微调器“显示”被禁用。

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

例如:

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

要启用我的微调器:

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

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

您无需更改样式或修改任何 XML。只需在您的代码中执行此操作,即使在事件方法中,您也应该没问题。

于 2015-06-04T14:21:54.980 回答