安卓选项卡文字颜色选择器无法响应state_pressed状态

3
我已经创建了自己的Android主题,以改变操作栏标签的外观。问题在于textcolor选择器似乎忽略state_pressed属性,因此选项卡文本的颜色始终相同,即使按下该选项卡也是如此。其他状态没有问题,例如state_selected被正确识别,并且所选选项卡具有与未选中选项卡文本颜色不同的文本颜色。
此外,我还为选项卡背景创建了选择器,并且在state_pressed的情况下正常工作(如果选项卡被按下,则其背景颜色会更改)。
以下是我的一些代码片段:
styles.xml:
<style name="Theme.MyTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarTabStyle">@style/Theme.MyTheme.TabStyle</item>
    <item name="android:actionBarTabTextStyle">@style/Theme.MyTheme.TabTextStyle</item>
</style>

...

<style name="Theme.MyTheme.TabStyle"
       parent="@android:style/Widget.Holo.Light.ActionBar.TabView">
    <item name="android:background">@drawable/background_selector</item>
</style>

<style name="Theme.MyTheme.TabTextStyle"
       parent="@android:style/Widget.Holo.Light.ActionBar.TabText">
    <item name="android:textColor">@color/textcolor_selector</item>
</style>

background_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="false" android:state_pressed="false">
        <shape>
            <solid android:color="#00ff00"/>
        </shape>
    </item>

    <item android:state_selected="false" android:state_pressed="true">
        <shape>
            <solid android:color="#0000ff"/>
        </shape>
    </item>

    <item android:state_selected="true" android:state_pressed="false">
        <shape>
            <solid android:color="#ff0000"/>
        </shape>
    </item>

    <item android:state_selected="true" android:state_pressed="true">
        <shape>
            <solid android:color="#ffff00"/>
        </shape>
    </item>
</selector>

textcolor_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:state_pressed="false"
          android:color="#ff0000"/>
    <item android:state_selected="true" android:state_pressed="true"
          android:color="#0000ff"/>
    <item android:state_selected="false" android:state_pressed="false"
          android:color="#ffff00"/>
    <item android:state_selected="false" android:state_pressed="true"
          android:color="#00ff00"/>
</selector>

我尝试了很多方法都没有成功 - 在 textcolor_selector 中,state_pressed 属性似乎被忽略了。请帮我理解并解决这个问题。
2个回答

1
请查看ActionBar样式文档中的自定义文字颜色部分 - 文档提到注意:应将应用于titleTextStyle的自定义样式使用TextAppearance.Holo.Widget.ActionBar.Title作为父样式。 - 或许在那里进行更改可以帮助解决问题。
另一个可看的地方是此处示例主题部分 - 它展示了一个android:actionBarTabTextStyle的示例,可能有助于解决您的问题。

谢谢你的回复。不幸的是,我已经看过你发布的两个链接,但它们都没有帮助到我。广告1. 这个注释是关于titletextstyle,而不是tabtextstyle。我的父级层次结构对于tabtextstyle是没问题的。广告2. 这个例子甚至没有使用选择器来设置文字颜色,它使用具体的层次结构以支持android < 3.0的设备。我使用这个链接中的层次结构:https://developer.android.com/training/basics/actionbar/styling.html#CustomText,部分“仅适用于Android 3.0及以上版本”。 - whatever
你确定 textcolor_selector 文件在 res/color/ 目录下吗?如你所述 <item name="android:textColor">@color/textcolor_selector</item> - Bret
可能没有什么区别,但在我看过的所有Android文档示例中,state_pressed都是首选且在这里也被列为第一选项 --- 尝试更改textcolor_selector文件中的states顺序,将每个<item>state_pressed放在state_selected之前 - Bret
是的,我的textcolor_selector文件位于res/color/目录下。我也尝试过使用@drawble/textcolor_selector和drawable目录,但仍然没有效果。属性的顺序不应该有影响,但我已经尝试将state_pressed放在最开始的位置,但没有成功,我甚至尝试了这样的代码: <selector xmlns:android="schemas.android.com/apk/res/android">; <item android:state_pressed="true" android:color="#ff0000" /> <item android:state_pressed="false" android:color="#0000ff"/> </selector> - whatever

1
在drawable文件夹中尝试这个:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="true">
        <shape>
            <corners android:radius="0dp" />
            <solid android:color="@color/white" />
            <stroke android:width="1dp" android:color="@color/color_700" />
            <padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" />
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape>
            <corners android:radius="0dp" />
            <solid android:color="@color/color_100" />
            <stroke android:width="1dp" android:color="@color/bloqueado" />
            <padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" />
        </shape>
    </item>

</selector>


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