TabWidgetのTextViewに、ColorStateListを設定する [Android]
setIndicator()で、独自のタブを設定している時は、そこでやれると思うんですが、標準のタブを使い、タブが選択されている時と選択されていない時の色を変えたいとかいう時のため。
通常、こんな感じの階層になっているはず。
layoutには、TabHostのID位は付けていると思うので、TabHostにぶら下がっている、TabWidgetを見つけ、そのさらに下にぶら下がっているTextViewに対して、setTextColor()してしまおうという荒技。
呼び出し部分
選択されているタブは赤、選択されていないタブの文字は青にする場合
処理部分
もっと簡単にできるのかも?
通常、こんな感じの階層になっているはず。
android.widget.TabWidget android.widget.RelativeLayout - tab1 android.widget.ImageView android.widget.TextView android.widget.RelativeLayout - tab2 android.widget.ImageView android.widget.TextView
layoutには、TabHostのID位は付けていると思うので、TabHostにぶら下がっている、TabWidgetを見つけ、そのさらに下にぶら下がっているTextViewに対して、setTextColor()してしまおうという荒技。
呼び出し部分
setTabTextColor((TabHost)findViewById(R.id.tabhost), this.getResources().getColorStateList(R.color.tab_indicator_text));
選択されているタブは赤、選択されていないタブの文字は青にする場合
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="#FF0000"/> <item android:color="#0000FF"/> </selector>
処理部分
private void setTabTextColor(TabHost tabhost, ColorStateList colorStateList) { for(int i = 0; i < tabhost.getChildCount(); i++) { /** * TabWidget を検索する */ Object obj = tabhost.getChildAt(i); if(obj instanceof TabWidget) { setTabTextColorSub((ViewGroup)obj, colorStateList); break; } } } private void setTabTextColorSub(ViewGroup viewgrop, ColorStateList colorStateList) { for(int i = 0; i < viewgrop.getChildCount(); i++) { /** * TextView を検索する */ Object obj = viewgrop.getChildAt(i); if(obj instanceof TextView) { /** * 色設定 */ ((TextView)obj).setTextColor(colorStateList); } else if(obj instanceof ViewGroup) { /** * ViewGroup に属していたら階層を下る */ setTabTextColorSub((ViewGroup)obj, colorStateList); } } }
もっと簡単にできるのかも?
コメント 0