2014-04-04 52 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"/> 
相關問題