【问题标题】:Tabs text custom color in Sherlock Action BarSherlock 操作栏中的选项卡文本自定义颜色
【发布时间】:2012-07-09 10:38:52
【问题描述】:

如何根据是否选择选项卡来更改操作栏中选项卡的颜色?

它应该看起来像这样:选中时为黑色,未选中/不活动时为棕色。

我尝试在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) {
        }
    }

【问题讨论】:

    标签: android styles actionbarsherlock


    【解决方案1】:

    以上答案是有效的,但它们不完整。如果您想要根据标签的状态而改变的不同文本颜色,您需要执行以下步骤:

    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. 最后在您的&lt;style name="Theme.yourTheme" parent="@style/Theme.Sherlock"&gt; 中添加以下行到您的应用主题中

      <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).
      如果您在 "android:actionBarStyle" 行收到 Lint 警告,请将该行替换为以下内容:

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

    【讨论】:

    • 您是否对每个不同的styles.xml 文件重复该过程?无论如何,不​​推荐使用 ABS,您应该使用谷歌的 appcompat 库
    • 没有。我只在 res/values/styles.xml 文件中添加了上述内容。此外,我没有使用 ABS。我正在使用普通的 FragmentActivity 类,其中每个选项卡都有多个片段。
    • 那么你不能继承这种风格 "@style/Widget.Sherlock.ActionBar.TabText" 你需要从这样的风格/Widget.AppCompat.ActionBar.TabText 继承你可以在此处查看样式选项:developer.android.com/training/basics/actionbar/…
    • 我继承了这种风格——@android:style/Widget.Holo.ActionBar.TabText
    • 不适合我的风格说:- 找不到资源 @style/Widget.Sherlock.ActionBar.TabText
    【解决方案2】:

    其实很简单。你要做的就是定义一个这样的属性

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

    【讨论】:

    • 好消息是,即使不使用夏洛克,在常规操作栏中也可以使用同样的方法。
    • 在我的代码中说找不到与给定名称匹配的资源 'android:style/ Widget.Sherlock.ActionBar.TabText' 请帮助
    • @PatelDhaval 您的项目依赖项中有 actionbarsherlock 库吗?添加后,清理您的项目并重试
    • @kaplanfat 感谢您的回复,我可以做到这一点,但没有成功。在我的项目中进行了一些研究后,我将 actionbarsherlock 库用作 jar 文件,因此现在用作库项目,然后为我工作
    【解决方案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>
    

    【讨论】:

    • 不适合我说找不到 attr actionBarTabTextStyle 的资源
    【解决方案4】:

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

    【讨论】:

    • 很抱歉,我不知道 FragmentTransaction 是什么......我会尝试阅读并在某个时候回复您
    【解决方案5】:
    <!-- 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多