如何在冰淇淋三明治中为TabWidget设置样式?

5

我在一个冰淇淋三明治应用程序中使用了已被弃用的TabHost / TabWidget库。 我没有时间熟悉ActionBarSherlock,所以我只能按照我知道的方法进入应用程序。

我想知道如何设置TabWidget及其标签对象的样式,从更改选定的标签颜色到背景颜色和图像? 使用标准的样式和主题似乎不起作用。

1个回答

8

假设废弃的库与以往一样正常工作,按照应有的方式工作,这是我用来着色标签的过程。由于在xml中无法直接访问背景,所以我只需在代码中设置背景:

 TabWidget tabs = (TabWidget)getTabWidget();            
        for (int i = 0; i<tabs.getChildCount(); i++) {
            RelativeLayout tab = (RelativeLayout) tabs.getChildAt(i);
            tab.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.tabindicator));

选项卡指示器的绘制方式如下:
<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--  Non focused states --> 
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected" /> 
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected" /> 
<!--  Focused states  --> 
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_focus" /> 
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_focus" /> 
 <!--  Pressed  --> 
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_press" /> 
<item android:state_pressed="true" android:drawable="@drawable/tab_press" /> 
</selector>

这些可绘制对象只是带有颜色的9-patch图像,虽然您可以使用标准颜色获得类似的效果。


这基本上是正确的,谢谢。我必须通过调用tabHost.getTabWidget()来获取TabWidget,但从那里开始,其余的就很容易了。非常感谢您,Stev_k。 - Andrew Weir
在支持库中引入了FragmentTabHost后,这个又被再次使用起来。此外,在FragmentTabHost中,选项卡子视图不是RelativeLayout而是LinearLayout - Abdullah Shoaib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接