2014-04-04 50 views
7

我有一个TabWidget,与FragmentTabHost`无关。在TabWidget中更改文本颜色和选择器

我想自定义TabWidget的外观,但我不明白。我的意图是更改文本颜色和选择器颜色,如图所示,我可以更改TabWidget的背景。我不想为选项卡使用自定义TextView,因为选项卡必须具有Holo外观和感觉。

TabWidget

我试图把风格,以TabWidget,但它不工作。通过这种方式:

<TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      style="@style/MyTabs" 
      /> 

,并与风格

<style name="MyTabs"> 
     <item name="android:textColor">@color/white</item> 
     <item name="android:background">@drawable/tabs</item> 
     <item name="android:backgroundStacked">@color/red_action_bar</item> 
    </style> 

我试图从使用parent="android:Widget.Holo.TabWidget"一个theme.xml添加的样式,但没有任何反应。

+0

https://developer.android.com/traini ng/basics/actionbar/styling.html – Raghunandan

+0

谢谢,但正如我所说的。这个标签是独立于ActionBar的,请仔细阅读这个问题。 @Raghunandan – Mun0n

+0

有一个主题cutomizing选项卡指标,所以这就是为什么我张贴该链接。任何方式祝你好运 – Raghunandan

回答

7

我终于找到了一种方法来做到这一点。在的Fragment

for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { 
       View v = tabHost.getTabWidget().getChildAt(i); 
       v.setBackgroundResource(R.drawable.tabs); 

       TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); 
       tv.setTextColor(getResources().getColor(R.color.white)); 
} 

onCreateView方法使用此代码和TabWidget的bakcground颜色设置为红色

0

我没有改变自己的标签,但我会假设你可以从styles.xml这些风格做...

<style name="Widget.Holo.TabWidget" parent="Widget.TabWidget"> 
     <item name="android:tabStripLeft">@null</item> 
     <item name="android:tabStripRight">@null</item> 
     <item name="android:tabStripEnabled">false</item> 
     <item name="android:divider">?android:attr/dividerVertical</item> 
     <item name="android:showDividers">middle</item> 
     <item name="android:dividerPadding">8dip</item> 
     <item name="android:measureWithLargestChild">true</item> 
     <item name="android:tabLayout">@android:layout/tab_indicator_holo</item> 
    </style> 

与tab_indicator_holo.xml

<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_holo" /> 
     <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" /> 

     <!-- Focused states --> 
     <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" /> 
     <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" /> 

     <!-- Pressed --> 
     <!-- Non focused states --> 
     <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" /> 
     <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" /> 

     <!-- Focused states --> 
     <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_focused_holo" /> 
     <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_focused_holo" /> 
    </selector> 

或者你也可以尝试

<style name="Widget.Holo.ActionBar.TabView" parent="Widget.ActionBar.TabView"> 
      <item name="android:background">@drawable/tab_indicator_ab_holo</item> 
      <item name="android:paddingLeft">16dip</item> 
      <item name="android:paddingRight">16dip</item> 
     </style> 

和tab_indicator_ab_holo.xml

<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="@color/transparent" /> 
     <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" /> 

     <!-- Focused states --> 
     <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/list_focused_holo" /> 
     <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" /> 

     <!-- Pressed --> 
     <!-- Non focused states --> 
     <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/list_pressed_holo_dark" /> 
     <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" /> 

     <!-- Focused states --> 
     <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" /> 
     <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" /> 
    </selector> 

最后使用两个png-9可绘制:tab_selected_holo和tab_unselected_holo。它们看起来像你谈论的两条更粗更薄的蓝线。

或者你是指minitabs?

<style name="Widget.ActionBar.TabView" parent="Widget"> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:background">@drawable/minitab_lt</item> 
     <item name="android:paddingLeft">4dip</item> 
     <item name="android:paddingRight">4dip</item> 
    </style> 

与minitab_lt.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:state_selected="true" 
      android:drawable="@drawable/minitab_lt_press" /> 
    <item android:state_selected="true" 
      android:drawable="@drawable/minitab_lt_selected" /> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/minitab_lt_unselected_press" /> 
    <item android:drawable="@drawable/minitab_lt_unselected" /> 
</selector> 

如果您需要另一个定义只是搜索TabWidget在这里:https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

然后像往常一样与所有必需的属性和绘图定义自己的风格...

+0

是的,它没有给我的结果,我一直在寻找....谢谢 – Mun0n

-2

正如我回答here,这实际上可以使用XML的主题进行。 TabWidget对于所选标签使用android:textPrimaryColor,对于未选中标签使用android:textSecondaryColor。强调色是由colorAccent确定并colorPrimary这样的背景颜色,就可以实现这样的期望定制:

在styles.xml:

<style name="TabWidgetTheme" parent="AppTheme"> 
    <item name="colorPrimary">@color/your_primary_color</item> 
    <item name="colorAccent">@color/your_accent_color</item> 
    <item name="android:textPrimaryColor">@color/your_primary_color</item> 
    <item name="android:textSecondaryColor">@color/your_secondary_color</item> 
</style> 

在您的布局:

<TabHost 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:theme="@style/TabWidgetTheme"/> 

请注意,android:theme不应直接位于TabWidget本身,而应该包含TabHost或类似物。

+1

简单和错误的解决方案。 'android:textPrimaryColor'和'android:textSecondaryColor'不存在,选项卡的颜色不会改变。 – CoolMind

+0

@CoolMind你碰巧知道哪些属性存在? – mpilliador

+0

@mpilliador,对不起,我无法访问该项目。最佳答案也帮助了我。据我所知,在res/layout中有一个描述标签头的XML。它可以连接到TabWidget。 – CoolMind

0

试试这个:

1,创建一个新的风格:

<style name="TabText"> 
    <item name="android:textColor">@color/YOUR_COLOR</item> 
</style> 

2.1936接头主机,设置主题:

<TabHost android:theme="@style/TabText"> 

3,后台可以设置在正常TabWidget

<TabWidget android:background="#FFF"/> 
相关问题