【问题标题】:How to change the colour of ActionBar navigation tabs?如何更改 ActionBar 导航选项卡的颜色?
【发布时间】:2013-12-31 11:14:44
【问题描述】:

我在应用中有一个 ActionBar,它嵌入了导航选项卡(不是 TabHost!)。默认情况下,选项卡显示为深灰色,所有选项卡下方都有一条蓝色细线,所选选项卡上有一个蓝色标记。

我应该覆盖哪些样式来更改这些颜色?

【问题讨论】:

    标签: android android-actionbar


    【解决方案1】:

    我没有更改选项卡本身,但我假设您可以使用 styles.xml 中的这些样式来做到这一点...

     <style name="Widget.Holo.TabWidget" parent="Widget.TabWidget">
            <item name="android:tabStripLeft">@null</item>
            <item name="android:tabStripRight">@null</item>
            <item name="android:tabStripEnabled">false</item>
            <item name="android:divider">?android:attr/dividerVertical</item>
            <item name="android:showDividers">middle</item>
            <item name="android:dividerPadding">8dip</item>
            <item name="android:measureWithLargestChild">true</item>
            <item name="android:tabLayout">@android:layout/tab_indicator_holo</item>
        </style>
    

    使用 tab_indicator_holo.xml

      <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <!-- Non focused states -->
            <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" />
            <item android:state_focused="false" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />
    
            <!-- Focused states -->
            <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" />
            <item android:state_focused="true" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" />
    
            <!-- Pressed -->
            <!--    Non focused states -->
            <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
            <item android:state_focused="false" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
    
            <!--    Focused states -->
            <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_focused_holo" />
            <item android:state_focused="true" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_focused_holo" />
        </selector>
    

    或者你也可以试试

       <style name="Widget.Holo.ActionBar.TabView" parent="Widget.ActionBar.TabView">
                <item name="android:background">@drawable/tab_indicator_ab_holo</item>
                <item name="android:paddingLeft">16dip</item>
                <item name="android:paddingRight">16dip</item>
            </style>
    

    和 tab_indicator_ab_holo.xml

       <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <!-- Non focused states -->
            <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@color/transparent" />
            <item android:state_focused="false" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />
    
            <!-- Focused states -->
            <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/list_focused_holo" />
            <item android:state_focused="true" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" />
    
            <!-- Pressed -->
            <!--    Non focused states -->
            <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/list_pressed_holo_dark" />
            <item android:state_focused="false" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
    
            <!--    Focused states -->
            <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
            <item android:state_focused="true" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
        </selector>
    

    最后使用两个 png-9 可绘制对象:tab_selected_holotab_unselected_holo。它们看起来就像你所说的两条粗细的蓝线。

    或者你的意思是迷你标签?

     <style name="Widget.ActionBar.TabView" parent="Widget">
            <item name="android:gravity">center_horizontal</item>
            <item name="android:background">@drawable/minitab_lt</item>
            <item name="android:paddingLeft">4dip</item>
            <item name="android:paddingRight">4dip</item>
        </style>
    

    在 minitab_lt.xml 中

     <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:state_selected="true"
              android:drawable="@drawable/minitab_lt_press" />
        <item android:state_selected="true"
              android:drawable="@drawable/minitab_lt_selected" />
        <item android:state_pressed="true"
              android:drawable="@drawable/minitab_lt_unselected_press" />
        <item android:drawable="@drawable/minitab_lt_unselected" />
    </selector>
    

    如果您需要其他定义,只需在此处搜索 TabWidget:https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

    然后像往常一样使用所有必需的属性和可绘制对象定义自己的样式...

    【讨论】:

    • 我看不到任何设置背景颜色、底部线条或选定标记的颜色...
    • 看看你的意思是不是 TabViews 的 minitabs。它们看起来就像您所指的那样。我相应地编辑了我的答案......
    • 您指的“minitab”是什么?我说的是这些标签developer.android.com/images/ui/actionbar.png
    • Tbh 我发现您的答案很难阅读。我改用了这篇博文,它更清晰android-developers.blogspot.com/2011/04/…
    • 感谢您的反馈,这很有趣,因为在您的参考中,他们使用 ad_tab_selected_holo 而不是我参考中的 tab_selected_pressed_holo。实际上,我在文件系统中的任何地方都找不到您引用的样式,也找不到可绘制的 ad_tab_selected_holo。我想知道这意味着什么,以及如何首先找到它?希望它虽然有效!您是只使用 Light 样式还是实际上也更改了 drawable?
    【解决方案2】:

    如果您想轻松自定义标签栏,可以使用这个很棒的工具: http://jgilfelt.github.io/android-actionbarstylegenerator

    您只需选择所需的颜色,它会自动生成样式 XML、PNG 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      相关资源
      最近更新 更多