如何使用一行布局更改 ActionBar Tab 文本颜色?
how to change the ActionBar Tab text color with one line layout?
有两行布局,看ActionBar
选项卡,文字颜色为蓝色;
而且这是单行布局,texColor是白色的,你怎么做出来的?
1 要改变Tab Style,不能使用actionBar.newTab().setText(xxx)
,因为你不能获取TextView,所以你必须创建一个TextView,然后使用actionBar.newTab().setCustomView(tabView)
;
private TextView createTab(int titleText) {
TextView textView = new TextView(this,null,R.attr.actionBarTabTextStyle);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setEllipsize(TextUtils.TruncateAt.END);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT);
textView.setLayoutParams(lp);
textView.setText(titleText);
return textView;
}
2 看R.attr.actionBarTabTextStyle
属性,必须在attrs.xml
中写一行
//attrs.xml
<attr name="actionBarTabTextStyle" format="reference"/>
样式参考,在styles/xml或theme.xml
<style name="MyTheme" parent="android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarTabTextStyle">@style/ActionBarTabTextStyle</item>
<item name="actionBarTabTextStyle">@style/ActionBarTabTextStyle</item>
</style>
3 创建一个 Tab 并将其添加到 ActionBar:
// MainActivity
TextView tabView=createTab(tabTitle);
ActionBar.Tab actionBarTab=actionBar.newTab();
actionBarTab.setCustomView(tabView).setTabListener(this)
actionBar.addTab(actionBarTab);
4 ActionBar 有一个私有的field:mHasEmbeddedTabs,当一行为真,其他为假,所以只取这个字段的值。
private boolean mHasEmbeddedTabs =true;
@Override
public void onCreate(Bundle savedInstanceState) {
try {
Field field = actionBar.getClass().getDeclaredField("mHasEmbeddedTabs");
field.setAccessible(true);
this.mHasEmbeddedTabs=field.getBoolean(actionBar);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
5 现在我可以在操作栏和选项卡在一行时更改选项卡文本颜色
if(this.mHasEmbeddedTabs){
tabView.setTextColor(getResources().getColor(R.color.white));
}
有两行布局,看ActionBar
选项卡,文字颜色为蓝色;
而且这是单行布局,texColor是白色的,你怎么做出来的?
1 要改变Tab Style,不能使用actionBar.newTab().setText(xxx)
,因为你不能获取TextView,所以你必须创建一个TextView,然后使用actionBar.newTab().setCustomView(tabView)
;
private TextView createTab(int titleText) {
TextView textView = new TextView(this,null,R.attr.actionBarTabTextStyle);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setEllipsize(TextUtils.TruncateAt.END);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT);
textView.setLayoutParams(lp);
textView.setText(titleText);
return textView;
}
2 看R.attr.actionBarTabTextStyle
属性,必须在attrs.xml
//attrs.xml
<attr name="actionBarTabTextStyle" format="reference"/>
样式参考,在styles/xml或theme.xml
<style name="MyTheme" parent="android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarTabTextStyle">@style/ActionBarTabTextStyle</item>
<item name="actionBarTabTextStyle">@style/ActionBarTabTextStyle</item>
</style>
3 创建一个 Tab 并将其添加到 ActionBar:
// MainActivity
TextView tabView=createTab(tabTitle);
ActionBar.Tab actionBarTab=actionBar.newTab();
actionBarTab.setCustomView(tabView).setTabListener(this)
actionBar.addTab(actionBarTab);
4 ActionBar 有一个私有的field:mHasEmbeddedTabs,当一行为真,其他为假,所以只取这个字段的值。
private boolean mHasEmbeddedTabs =true;
@Override
public void onCreate(Bundle savedInstanceState) {
try {
Field field = actionBar.getClass().getDeclaredField("mHasEmbeddedTabs");
field.setAccessible(true);
this.mHasEmbeddedTabs=field.getBoolean(actionBar);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
5 现在我可以在操作栏和选项卡在一行时更改选项卡文本颜色
if(this.mHasEmbeddedTabs){
tabView.setTextColor(getResources().getColor(R.color.white));
}