如何根据是否选择了标签来更改操作栏中标签的颜色?
它应该如下所示:选中时为黑色,未选中/不活动时为那种棕色。
我尝试在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) {
}
}
答案 0 :(得分:11)
上述答案有效,但不完整。如果您希望根据标签的状态更改不同的文字颜色,则需要按照以下步骤操作:
首先,将以下行添加到res/values/colors.xml
文件
<color name="text_tab_selected">#000000</color>
<color name="text_tab_unselected">#886C2A</color>
在/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"
这是真正的优惠。
正如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>
最后添加到您的应用主题<style name="Theme.yourTheme" parent="@style/Theme.Sherlock">
<item name="actionBarTabTextStyle">@style/TabTextColor</item>
<item name="android:actionBarTextStyle>@style/TabTextColor</item>
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>
答案 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>