【问题标题】:Android tabs textcolor selector ignores state_pressedAndroid标签文本颜色选择器忽略state_pressed
【发布时间】:2014-11-14 00:13:38
【问题描述】:

我创建了自己的 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>

我尝试了一切都没有成功 - state_pressed 属性似乎被忽略了,但仅在 textcolor_selector 中。请帮助我理解并解决这个问题。

【问题讨论】:

    标签: android android-styles textcolor


    【解决方案1】:

    查看 ActionBar 样式文档的 Customize the Text Color 部分 - 它提到了 Note: The custom style applied to titleTextStyle should use TextAppearance.Holo.Widget.ActionBar.Title as the parent style. - 也许那里的更改可能有助于解决问题。

    另一个地方是hereExample theme 部分下的here - 它显示了android:actionBarTabTextStyle 的示例,这可能有助于为您整理事情。

    【讨论】:

    • 感谢您的回复。不幸的是,我已经看到了您发布的两个链接,但它们没有帮助。 Ad1. 这个注释是关于titletextstyle,而不是tabtextstyle。我的 tabtextstyle 父层次结构没问题。 Ad2. 这个例子甚至没有使用文本颜色选择器,而是使用特定的层次结构来支持 android link 的层次结构,“仅适用于 Android 3.0 及更高版本”部分。
    • 确定一下 - 您的 textcolor_selector 文件位于 res/color/ 目录中?如您的声明中所述&lt;item name="android:textColor"&gt;@color/textcolor_selector&lt;/item&gt;
    • 可能没有什么不同,但在我在 android 文档中看到的所有示例中,state_pressed 在其他选项之前是used first,并且首先列出了here --- 试试在您的 textcolor_selector 文件中更改 states 的顺序,将 state_pressed 放在每个 state_selected 之前 &lt;item&gt;
    • 是的,我的 textcolor_selector 文件位于 res/color/ 中。我也试过@drawble/textcolor_selector 和drawable 目录,还是没有。属性的顺序无关紧要,但是我已经尝试将 state_pressed 放在一开始但没有成功,我什至尝试过类似的东西:&lt;selector xmlns:android="schemas.android.com/apk/res/android"&gt;; &lt;item android:state_pressed="true" android:color="#ff0000" /&gt; &lt;item android:state_pressed="false" android:color="#0000ff"/&gt; &lt;/selector&gt;
    【解决方案2】:

    在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>

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 2016-02-12
      • 1970-01-01
      • 2017-03-26
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多