android:自定义主题不会正确更改文本颜色和背景图像

时间:2014-09-18 08:45:49

标签: android xml android-styles

我想为我的应用创建自定义主题。具体来说,我想更改操作栏和选项卡指示器的布局。看了一些教程后,我得到了一个自定义主题,它改变了我的操作栏的背景以及我的标签指示器的背景。
但是我使用了一个状态列表drawable for tab指示符,由于某种原因它没有正确显示tab选项卡的“selected”状态。它只在我按下标签指示时才会这样做。也出于某种原因,我无法让标签指示器中的文字颜色发生变化。

自定义标签指示符的XML如下所示

<style name="MyActionBarTabs"
    parent="@style/Widget.AppCompat.ActionBar.TabView">
    <!-- tab indicator -->
    <item name="android:background">@drawable/action_bar_tab_indicator</item>

    <!-- Support library compatibility -->
    <item name="background">@drawable/action_bar_tab_indicator</item>

    <item name="android:showDividers">none</item>
    <item name="android:actionBarTabTextStyle">@style/MyTabTextStyle</item>

</style>

自定义主题的主题如下所示:

<style name="CustomActionBarTheme"
    parent="@style/Theme.AppCompat">
    <item name="android:actionBarStyle">@style/MyActionBar</item>

    <item name="android:actionMenuTextColor">#000000</item>

    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/MyActionBar</item>

    <item name="actionMenuTextColor">#000000</item>


    <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>

    <!-- Support library compatibility -->
    <item name="actionBarTabStyle">@style/MyActionBarTabs</item>


</style>

我为标签指示符的文本颜色定义的样式如下所示

<style name="MyTabTextStyle"
    parent="Widget.AppCompat.ActionBar.TabText">
    <item name="android:textColor">#666666</item>
    <item name="android:textSize">9pt</item>
</style>

状态列表drawable看起来像这样

    

<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false"
    android:state_pressed="false"
    android:drawable="@drawable/days_line" />
<item android:state_focused="false" android:state_selected="true"
    android:state_pressed="false"
    android:drawable="@drawable/days_line" />

<!-- Focused states (such as when focused with a d-pad or mouse hover) -->
<item android:state_focused="true" android:state_selected="false"
    android:state_pressed="false"
    android:drawable="@drawable/days_line" />
<item android:state_focused="true" android:state_selected="true"
    android:state_pressed="false"
    android:drawable="@drawable/days_line" />


<!-- STATES WHEN BUTTON IS PRESSED -->

<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false"
    android:state_pressed="true"
    android:drawable="@drawable/selected_day" />
<item android:state_focused="false" android:state_selected="true"
    android:state_pressed="true"
    android:drawable="@drawable/selected_day" />

<!-- Focused states (such as when focused with a d-pad or mouse hover) -->
<item android:state_focused="true" android:state_selected="false"
    android:state_pressed="true"
    android:drawable="@drawable/selected_day" />
<item android:state_focused="true" android:state_selected="true"
    android:state_pressed="true"
    android:drawable="@drawable/selected_day" />

基本上我只是从android文档中获取了大部分xml,只是更改了图片等。 此外,我似乎无法找到一种方法来固定选项卡指标。我总是有5个标签“星期一到星期五”,它们应该总是显示在同一个位置,但此时标签指示器默认是侧面可滚动的。

我知道这些问题很多,但它们似乎都很相关。如果我错过了重要的事情,请告诉我,例如一些信息将有助于更彻底地检查我的问题。我想也许我只是错过了一件小事,但我现在花了整整一天时间处理这个问题而且文档本身并没有解释比我在这里得到的更多。

提前致谢

1 个答案:

答案 0 :(得分:0)

解决了它

第一件事很容易解决,我搞砸了状态列表drawable(必须更改背景图片以响应正确选择,聚焦和按下状态)。

另一个问题是标签文字的颜色没有变化。事实证明,你必须在主题中定义它,而不是在动作栏标签主题中定义它:

<style name="CustomActionBarTheme"
    parent="@style/Theme.AppCompat">
    <item name="android:actionBarTabTextStyle">@style/MyTabTextStyle</item>
    <!--for support library-->
    <item name="actionBarTabTextStyle">@style/MyTabTextStyle</item>
</style>