5

我一直在嘗試幾天來重寫自定義選項卡樣式的全息主題,但我的更改沒有任何效果。爲什麼我的自定義'actionBarTabStyle'不覆蓋默認樣式/主題?

這裏是我的styles.xml

<!-- the theme applied to the application or activity --> 
<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo"> 
    <item name="android:tabWidgetStyle">@style/MyActionBarTabs</item> 
</style> 

<!-- ActionBar tabs styles --> 
<style name="MyActionBarTabs" parent="@android:style/Widget.Holo.ActionBar.TabView"> 

    <!-- tab indicator --> 
    <item name="android:background">@drawable/tabselector</item> 
</style>> 

這是我tabselector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

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

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

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

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

</selector> 

我已在我的活動使用TabHost標籤和它的佈局看起來像這樣

<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

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

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:layout_weight="0" /> 

     <FrameLayout 
      android:id="@+id/realtabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</android.support.v4.app.FragmentTabHost> 

我遵循Android Developer Page的示例

我的標籤看起來還是一樣的。 我的標籤指標應該是我自定義的粉紅色。但是,沒有變化,他們仍然是藍色的。

注意事項:

  1. 我的清單文件引用更新的主題在我的應用程序標籤
  2. 我styles.xml在每個值更新的文件夾(值,值-V11,價值觀-V14)
  3. 這一切都被添加在我的應用程序的頂部的操作欄與我ic_launcher圖像和標題

我缺少什麼或者做錯了嗎?感謝任何幫助。謝謝你們!

回答

5

ActionBar中的選項卡使用與TabHost中的選項卡不同的主題。

您只需要將android:actionBarTabStyle更改爲android:tabWidgetStyle即可。

完整示例

<style name="Your.Theme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> 
    <item name="android:tabWidgetStyle">@style/Your.TabWidget</item> 
</style> 

<style name="Your.TabWidget" parent="@android:style/Widget.Holo.TabWidget"> 
    <item name="*android:tabLayout">@layout/your_tab_layout</item> 
</style> 

<style name="Your.Tab" parent="@android:style/Widget.Holo.ActionBar.TabView"> 
    <item name="android:background">@drawable/your_tab_indicator</item> 
    <item name="android:layout_width">0dip</item> 
    <item name="android:layout_weight">1</item> 
    <item name="android:minWidth">80dip</item> 
</style> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/Your.Tab" 
    android:layout_height="?android:attr/actionBarSize" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@android:id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:visibility="gone" /> 

    <TextView 
     android:id="@android:id/title" 
     style="@android:style/Widget.Holo.ActionBar.TabText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:maxWidth="180dip" /> 

</LinearLayout> 

雖然,android:tabLayout不是公共屬性(因此*)。谷歌不會推薦創建這樣的風格,因此會建議動態修改指標。所以,這樣的事情:

final TabWidget tabWidget = tabHost.getTabWidget(); 
    for (int i = 0; i < tabWidget.getTabCount(); i++) { 
     final View tab = tabWidget.getChildTabViewAt(i); 
     tab.setBackground(getResources().getDrawable(R.drawable.your_tab_indicator)); 
    } 

結果

Example

+0

感謝您的快速反應。做過某事。它絕對改變了標籤下面的髮際線......但是,藍色的指示顏色仍然存在。我想我可以看到粉紅色隱藏在藍色下......但它仍然重疊。 –

+0

在style.xml中更新了我的代碼,以在您的建議中顯示編輯 –

+0

@MarkBarrasso我使用完整示例進行了編輯。 – adneal