Android:使用主题/样式更改禁用文本的颜色?

Android:使用主题/样式更改禁用文本的颜色?,android,colors,styles,textview,themes,Android,Colors,Styles,Textview,Themes,我在my color.xml中定义了以下颜色: <color name="gold">#d49e43</color> <color name="gold_disabled">#80d49e43</color> #d49e43 #80d49e43 以及以下主题: <style name="Theme.Example" parent="@style/Theme.Sherlock"> <item name="a

我在my color.xml中定义了以下颜色:

<color name="gold">#d49e43</color>
<color name="gold_disabled">#80d49e43</color>
#d49e43
#80d49e43
以及以下主题:

<style name="Theme.Example" parent="@style/Theme.Sherlock">       
    <item name="android:textColor">@color/gold</item>
</style>

@颜色/金色
在我的设置活动中,我有一个复选框首选项和一个依赖于它的首选项。当复选框首选项未选中时,首选项将被禁用,但是,由于我设置的自定义金色文本颜色,它不会像默认颜色那样“变灰”。如何在XML中更改这一点?我试过设置:

    <item name="android:textColorPrimaryDisableOnly">@color/gold_disabled</item>
    <item name="android:textColorPrimaryInverseDisableOnly">@color/gold_disabled</item>
    <item name="android:textColorPrimaryNoDisable">@color/gold_disabled</item>
    <item name="android:textColorSecondaryNoDisable">@color/gold_disabled</item>
    <item name="android:textColorPrimaryInverseNoDisable">@color/gold_disabled</item>
    <item name="android:textColorSecondaryInverseNoDisable">@color/gold_disabled</item>
@color/gold\u已禁用
@颜色/金色(已禁用)
@颜色/金色(已禁用)
@颜色/金色(已禁用)
@颜色/金色(已禁用)
@颜色/金色(已禁用)

但似乎什么都不起作用。

我或多或少是偶然发现了这一点,但如果您将Preference子类化并覆盖onBindView(),则在禁用首选项时可以实现“灰显”效果:

@Override
protected void onBindView(View view) {
    // TODO Auto-generated method stub
    super.onBindView(view);
    TextView title = (TextView)view.findViewById(android.R.id.title);
    TextView summary = (TextView)view.findViewById(android.R.id.summary);

    if (title.isEnabled()) {
        title.setTextColor(getContext().getResources().getColor(R.color.gold));
    }
    else {
        title.setTextColor(getContext().getResources().getColor(R.color.gold_disabled));
    }

    if (summary.isEnabled()) {
        summary.setTextColor(getContext().getResources().getColor(R.color.orange));
    }
    else {
        summary.setTextColor(getContext().getResources().getColor(R.color.orange_disabled));
    }
}

我知道我迟到了。然而,我有完全相同的问题,我刚刚修复

我找到了一种只使用资源文件修复它的方法。我在这里找到了答案:

基本上,您可以在:res/color下创建颜色选择器/

注意:如果文件夹颜色不存在,则必须创建文件夹颜色

对我来说,我做到了:

res\color\primary\u text\u color\u selector.xml(用于标题)

这样,当选项被禁用时,标题和摘要将灰显


我只是在分享这个解决方案,因为我有同样的问题,它可能会帮助一些人

如果你看看谷歌是如何为他们的主题做的,你会注意到light(Platform.AppCompat.light)的这一点:

@color/abc\u primary\u text\u material\u light
@颜色/abc\u主要\u文本\u材质\u深色
对于黑暗主题(Platform.AppCompat):

@color/abc\u primary\u text\u material\u深色
@颜色/abc\u主\u文本\u材质\u灯光
这些颜色的设置如下所示:

abc\u primary\u text\u material\u dark.xml

<!-- Preference Screen Theme --> 
<style name="AppTheme_PreferenceScreenStyle">
    <item name="android:textColorPrimary">@color/primary_text_color_selector</item>
    <item name="android:textColorSecondary">@color/secondary_text_color_selector</item>
</style>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_dark"/>
    <item android:color="@color/primary_text_default_material_dark"/>
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_dark"/>
    <item android:color="@color/primary_text_default_material_dark"/>
</selector>

abc\u primary\u text\u material\u light.xml

<!-- Preference Screen Theme --> 
<style name="AppTheme_PreferenceScreenStyle">
    <item name="android:textColorPrimary">@color/primary_text_color_selector</item>
    <item name="android:textColorSecondary">@color/secondary_text_color_selector</item>
</style>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_dark"/>
    <item android:color="@color/primary_text_default_material_dark"/>
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_dark"/>
    <item android:color="@color/primary_text_default_material_dark"/>
</selector>

因此,您应该执行相同的操作(在主题文件中创建文件和对它们的引用)、处理明暗主题以及处理文本颜色的状态

要在应用程序中使用它,您可以使用
?android:textColorPrimary
?android:textColorPrimaryInverse


二级文本颜色和三级文本颜色也是一样,顺便说一句。

非常好的解决方案,包括实现它所需的所有步骤-帮助了我很多,这对更改复选框或单选按钮图标的颜色有用吗?如果是这样,styles.xml文件中的项目名称会是什么?请确保未定义“android:textColor”,否则这不起作用。我发现
android:textColorPrimary
对标题不起作用,但是
android:textColor
对标题起作用(在styles.xml中)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_dark"/>
    <item android:color="@color/primary_text_default_material_dark"/>
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/primary_text_disabled_material_dark"/>
    <item android:color="@color/primary_text_default_material_dark"/>
</selector>