SSブログ

TabWidgetのTextViewに、ColorStateListを設定する [Android]

setIndicator()で、独自のタブを設定している時は、そこでやれると思うんですが、標準のタブを使い、タブが選択されている時と選択されていない時の色を変えたいとかいう時のため。


通常、こんな感じの階層になっているはず。
 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);
			}
    	}
    }


もっと簡単にできるのかも?


タグ:TabWidget Android
nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Sipdroidのビルド|- ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。