2012-07-09 70 views
2

如何根據是否選擇標籤來更改操作欄中標籤的顏色?標籤夏洛克操作欄中的文字自定義顏色

它應該看起來像這樣:選中時爲黑色,未選中/不活動時爲棕色。

我試圖在styles.xml中設置它,但我找不到合適的名稱來使它工作。

非常感謝您的幫助!

編輯:我使用下面的代碼段用於TabsListener

class MyTabsListener implements TabListener { 
     private Fragment fragment; 

     public MyTabsListener(Fragment ef) { 
      this.fragment = ef; 
     } 

     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      ft.replace(R.id.realtabcontent, fragment); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     } 

     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     } 

     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     } 
    } 

enter image description here

回答

8

其實這是很easy.All你應該做的是確定這樣

<style name="tabtextcolor" parent="@style/Widget.Sherlock.ActionBar.TabText"> 
    <item name="android:textColor">@android:color/white</item> 
</style> 

然後

將這些樣式應用到主題屬性

<item name="actionBarTabTextStyle">@style/tabtextcolor</item> 
<item name="android:actionBarTabTextStyle">@style/tabtextcolor</item> 
+0

好處是,即使不使用sherlock,也可以在常規操作欄中使用相同的功能。 – SaltyNuts 2013-05-14 20:08:43

+0

在我的代碼中說找不到匹配給定名稱的資源'android:style/ Widget.Sherlock.ActionBar.TabText'請幫忙 – 2014-05-17 11:22:40

+0

@PatelDhaval你的項目依賴關係中有actionbarsherlock庫嗎?添加後,清理項目並重試 – kaplanfat 2014-05-21 07:45:15

0

如果您註冊TabHost.OnTabChanged事件,並呼籲mTabHost.getCurrentTabView()來獲取視圖,然後view.setBackgroundResource() - 你可以通過創建像這樣顏色資源設置背景圖片...

+0

見上請我更新 – noloman 2012-07-09 10:51:41

+0

對不起,我不知道一個FragmentTransaction是什麼....生病嘗試做一些閱讀,並在某些時候回覆給你 – RenegadeAndy 2012-07-09 11:19:46

0
<!-- ActionBar Tab bar style --> 
     <item name="actionBarTabBarStyle">@style/Sundio.ActionBarTabs</item> 
     <item name="android:actionBarTabBarStyle">@style/Sundio.ActionBarTabs</item> 

<style name="Sundio.ActionBarTabs" parent="Widget.Sherlock.Light.ActionBar.TabBar"> 
     <item name="android:background">@drawable/actionbar_tabs_selector</item> 
     <item name="background">@drawable/actionbar_tabs_selector</item> 
     <item name="titleTextStyle">@color/brown_text_color</item> 
     <item name="android:titleTextStyle">@color/brown_text_color</item> 
    </style> 
+0

不適合我。 – 2012-10-30 05:21:58

3

你可以這樣做:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true" android:color="#ff7a7a7a"/> <!-- pressed --> 
    <item android:state_focused="true" android:color="#ff7a7a7a"/> <!-- focused --> 
    <item android:state_selected="true" android:color="#ff6955b4"/> <!-- selected --> 
    <item android:color="#ff7a7a7a"/> <!-- default --> 

</selector> 

在你的風格中,你會做這樣的事情。我使用ActionBarSherlock,但您可以非常容易地找到非Sherlock應用程序的TabText樣式。

<style name="Theme.StyledActionBar" parent="@style/Theme.Sherlock"> 
    <item name="actionBarTabTextStyle">@style/StyledActionBarTabText</item> 
    <item name="android:actionBarTabTextStyle">@style/StyledActionBarTabText</item> 
</style> 

<style name="StyledActionBarTabText" parent="@style/Widget.Sherlock.ActionBar.TabText"> 
    <item name="android:textColor">@color/tab_text</item> 
</style> 
+0

對我不起作用,表示沒有找到attr action的資源BarTabTextStyle – 2014-05-17 11:29:57

11

上面的答案是有效的,但他們是不完整。如果你想有一個改變取決於標籤的狀態的不同文本顏色您需要按照下面的步驟:

  1. 首先,添加以下行到res/values/colors.xml文件

    <color name="text_tab_selected">#000000</color> 
    <color name="text_tab_unselected">#886C2A</color> 
    
  2. 創建一個android xml資源文件/res/color將其稱爲tab_text.xml(或任何你想要的,但跟蹤文件名)。這個文件需要成爲@Maarek的選擇器。

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.androdid.com/apk/res/android"> 
        <item android:state_selected="true" android:color="@color/text_tab_selected" /> 
        <item android:state_active="true" android:color="@color/text_tab_selected"/> 
        <item android:state_selected="false" android:color="@color/text_tab_unselected" /> 
        <item android:state_active="false" android:color="@color/text_tab_unselected"/> 
    </selector> 
    

    請注意state_active="false"state_active="true"是這裏真正的交易。

  3. 正如Fatih Kaplan和noloman所解釋的那樣,您必須將新的樣式添加到您的主題樣式中。打開或創建res/values/styles.xml並添加喲你的主題下面幾行:

    <style name="TabTextColor" parent="@style/Widget.Sherlock.ActionBar.TabText"> 
    <item name="android:textColor">@color/tab_text</item> 
    </style> 
    
  4. 最後添加到您的應用程序主題以下行的<style name="Theme.yourTheme" parent="@style/Theme.Sherlock">

    <item name="actionBarTabTextStyle">@style/TabTextColor</item> 
    <item name="android:actionBarTextStyle>@style/TabTextColor</item> 
    
  5. Corolary內:記住你的主題添加到manifest.xml文件中的活動。
    如果存在,請記住在每個Api版本的任何樣式文件中重複步驟4。 (res/values-v11/styles.xml, res/values-v16/styles.xml and so on)
    如果你得到"android:actionBarStyle"線棉絨警告,用以下內容替換該行:

    <item name="android:actionBarTabTextStyle" tools:ignore="NewApi">@style/TabTextColor</item> 
    

Tab capture

+0

不適合我。 ( – VikramV 2014-03-12 10:36:37

+0

)你是否在每個不同的styles.xml文件上重複該過程?無論如何,ABS已被棄用,你應該使用google的appcompat lib – Imanol 2014-03-12 10:58:41

+0

不,我已經在res/values/styles.xml文件中添加了上述內容 此外,我沒有使用ABS,我使用了普通的FragmentActivity類,其中每個標籤都有多個片段。 – VikramV 2014-03-12 15:28:17

相關問題