选项卡在Sherlock Action Bar中显示自定义颜色

时间:2012-07-09 10:38:53

标签: android styles actionbarsherlock

如何根据是否选择了标签来更改操作栏中标签的颜色?

它应该如下所示:选中时为黑色,未选中/不活动时为那种棕色。

我尝试在styles.xml中设置它,但是我找不到合适的名称来使它工作。

非常感谢你的帮助!

编辑:我正在使用TabsListener的以下代码

class MyTabsListener implements TabListener {
        private Fragment fragment;

        public MyTabsListener(Fragment ef) {
            this.fragment = ef;
        }

        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            ft.replace(R.id.realtabcontent, fragment);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        }

        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        }

        public void onTabReselected(Tab tab, FragmentTransaction ft) {
        }
    }

enter image description here

5 个答案:

答案 0 :(得分:11)

上述答案有效,但不完整。如果您希望根据标签的状态更改不同的文字颜色,则需要按照以下步骤操作:

  1. 首先,将以下行添加到res/values/colors.xml文件

    <color name="text_tab_selected">#000000</color>   
    <color name="text_tab_unselected">#886C2A</color>
    
  2. /res/color下创建一个android xml资源文件,调用它tab_text.xml(或任何你想要的,但跟踪文件名)。这个文件需要成为点@Maarek的选择器。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.androdid.com/apk/res/android"> 
      <item android:state_selected="true" android:color="@color/text_tab_selected" /> 
      <item android:state_active="true" android:color="@color/text_tab_selected"/> 
      <item android:state_selected="false" android:color="@color/text_tab_unselected" />
      <item android:state_active="false" android:color="@color/text_tab_unselected"/>
    </selector>
    

    请注意state_active="false"state_active="true"这是真正的优惠。

  3. 正如Fatih Kaplan和noloman所解释的那样,您必须为主题风格添加新风格。打开或创建res/values/styles.xml并将您的主题添加到以下行:

    <style name="TabTextColor" parent="@style/Widget.Sherlock.ActionBar.TabText">  
     <item name="android:textColor">@color/tab_text</item>  
    </style>  
    
  4. 最后添加到您的应用主题<style name="Theme.yourTheme" parent="@style/Theme.Sherlock">

    中的以下几行
    <item name="actionBarTabTextStyle">@style/TabTextColor</item>
    <item name="android:actionBarTextStyle>@style/TabTextColor</item>
    
  5. Corolary:请记住将您的主题添加到manifest.xml文件中的Activity 如果存在,请记住在每个Api版本的任何样式文件中重复步骤4。 (res/values-v11/styles.xml, res/values-v16/styles.xml and so on)
    如果您在"android:actionBarStyle"行上收到Lint警告,请将该行替换为以下内容:

    <item name="android:actionBarTabTextStyle" tools:ignore="NewApi">@style/TabTextColor</item>  
    
  6. Tab capture

答案 1 :(得分:8)

实际上它非常简单。你应该做的就是定义一个像这样的属性

<style name="tabtextcolor" parent="@style/Widget.Sherlock.ActionBar.TabText">
    <item name="android:textColor">@android:color/white</item>
</style>

然后

将这些样式添加到主题

<item name="actionBarTabTextStyle">@style/tabtextcolor</item>
<item name="android:actionBarTabTextStyle">@style/tabtextcolor</item>

答案 2 :(得分:3)

您可以通过创建如下颜色资源来执行此操作:

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

    <item android:state_pressed="true" android:color="#ff7a7a7a"/> <!-- pressed -->
    <item android:state_focused="true" android:color="#ff7a7a7a"/> <!-- focused -->
    <item android:state_selected="true" android:color="#ff6955b4"/> <!-- selected -->
    <item android:color="#ff7a7a7a"/> <!-- default -->

</selector>

在你的风格中,你会做这样的事情。我使用ActionBarSherlock但你可以很容易地找到非Sherlock应用程序的TabText样式。

<style name="Theme.StyledActionBar" parent="@style/Theme.Sherlock">
    <item name="actionBarTabTextStyle">@style/StyledActionBarTabText</item>
    <item name="android:actionBarTabTextStyle">@style/StyledActionBarTabText</item>
</style>

<style name="StyledActionBarTabText" parent="@style/Widget.Sherlock.ActionBar.TabText">
    <item name="android:textColor">@color/tab_text</item>
</style>

答案 3 :(得分:0)

如果注册TabHost.OnTabChanged事件并调用mTabHost.getCurrentTabView()来获取View,那么view.setBackgroundResource() - 你可以设置背景图像...

答案 4 :(得分:0)

<!-- ActionBar Tab bar style -->
        <item name="actionBarTabBarStyle">@style/Sundio.ActionBarTabs</item>
        <item name="android:actionBarTabBarStyle">@style/Sundio.ActionBarTabs</item>

<style name="Sundio.ActionBarTabs" parent="Widget.Sherlock.Light.ActionBar.TabBar">
        <item name="android:background">@drawable/actionbar_tabs_selector</item>
        <item name="background">@drawable/actionbar_tabs_selector</item>
        <item name="titleTextStyle">@color/brown_text_color</item>
        <item name="android:titleTextStyle">@color/brown_text_color</item>
    </style>