2017-05-22 413 views
3

我正嘗試創建自定義標籤佈局,因爲我需要在TextView旁邊設置徽章計數器。我已將id設置爲@android:id/text1,因爲它在文檔中提到過。TabLayout中選定的自定義標籤文本顏色

當我的自定義選項卡被選中時,TextView顏色不會自動更改。如何以正確和清潔的方式實現它?

正確選擇默認選項卡:

enter image description here

錯誤選擇的自定義選項卡(文字是灰色的,但應該是白色的):

enter image description here

代碼

PagerAdapter adapter = new MyAdapter(getSupportFragmentManager()); 
viewPager.setAdapter(adapter); 
tabLayout.setupWithViewPager(viewPager); 
TabLayout.Tab tab = tabLayout.getTabAt(2); 
if (tab != null) { 
    tab.setCustomView(R.layout.tab_proposed_rewards); 
} 

佈局

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@android:id/text1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="8dp" 
     android:gravity="center" 
     android:textAppearance="@style/TextAppearance.Design.Tab"/> 

    <TextView 
     android:id="@+id/indicator" 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:background="@drawable/background_indicator" 
     android:gravity="center" 
     android:lines="1"/> 

</LinearLayout> 

編輯

答:

tab.setCustomView(R.layout.tab_proposed_rewards); 
ColorStateList textColor = tabLayout.getTabTextColors(); 
TextView textView = (TextView) tab.getCustomView().findViewById(android.R.id.text1); 
textView.setTextColor(textColor); 
+0

答案在於[here](http://stackoverflow.com/questions/ 30909471/tablayout-android-design-library-text-color),第二個回答下來。使用您的styles.xml,以便您可以使用'style'標籤通過xml創建視圖,而不是以編程方式創建它。就我個人而言,我認爲這是實現它的「更乾淨」的方式。 –

+1

@DillonBurton沒有用自定義選項卡布局,但感謝幫助無論如何。我發現不同的解決方案 –

回答

1

你可以做到這一點編程。

以編程方式更改代碼中所選標籤的顏色。您可以使用setTabTextColors (int normalColor, int selectedColor)

,然後應用

yourTabLayout.setTabTextColors (Color.White, Color.Black); 

希望這能解決你的問題,更多信息可以在link

找到你的情況

TabHost tabHost = getTabHost(); 
for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) 
     { 
      TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); //Unselected Tabs 
      tv.setTextColor(Color.parseColor("#ffffff")); 
     } 
     TextView tv = (TextView) tabhost.getCurrentTabView().findViewById(android.R.id.title); //for Selected Tab 
     tv.setTextColor(Color.parseColor("#000000")) 

試試這個,它會改變顏色內部文本視圖

+0

感謝您使用tabTextColors提示。我得到默認的textColors形式TabLayout並將其應用到自定義的TextView。查看編輯的問題。 –

+0

@AleksanderMielczarek查看更新的答案,它有代碼來更改textView文本的顏色 –

相關問題