2

How can I change the colors of the tabs in the Action Bar depending on whether a tab is selected or not?

It should look like this: black when selected, and that kind of brown when not selected/inactive.

I tried to set it in the styles.xml but I couldn't find the proper name to make it work.

Thanks a lot for your help!

EDIT: I'm using the following piece of code for the 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

4

5 回答 5

11

上面的答案是有效的,但它们是不完整的。如果您希望根据选项卡的状态更改不同的文本颜色,则需要执行以下步骤:

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

    <color name="text_tab_selected">#000000</color>   
    <color name="text_tab_unselected">#886C2A</color>
    
  2. 创建一个 android xml 资源文件,/res/color命名为 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. 推论:记得将你的主题添加到 manifest.xml 文件中的 Activity 中。
    如果每个 Api 版本存在,请记住在任何样式文件中重复第 4 步。(res/values-v11/styles.xml, res/values-v16/styles.xml and so on).
    如果您在线收到 Lint 警告"android:actionBarStyle",请将该行替换为以下内容:

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

选项卡捕获

于 2013-05-15T10:32:34.807 回答
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>
于 2013-02-13T08:31:38.227 回答
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>
于 2012-12-03T18:31:51.850 回答
0

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

于 2012-07-09T10:43:35.250 回答
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>
于 2012-07-09T12:41:32.847 回答