タブへアイコンを表示させる

上記のようにタブへアイコンを表示させるには、

TabHost.TabSpec クラスの setIndicator 関数の第二引数へ

アイコンの Drawable を渡すことにより表示が可能です。

//********************

// タブ1 設定

//********************

// タブの生成

TabSpec tab1 = tabHost.newTabSpec("tab1");

// タブに表示する文字列、アイコンをセット

tab1.setIndicator("タブ1", getResources().getDrawable(drawable.ic_dialog_info));

// タブ選択時に表示するビューをセット

tab1.setContent(R.id.contentlayout1);

// タブホストにタブを追加

tabHost.addTab(tab1);

また、下記のように独自の画像をアイコンへ表示させたい場合、

PNG形式で下記3つの画像サイズのファイルが必要です。

ldpi - 24 x 24 px

mdpi - 32 x 32 px

hdpi - 48 x 48 px

詳しくは、こちら

画像を用意したら、それぞれ下記ディレクトリへ設置します。

res/drawable-ldpi

res/drawable-mdpi

res/drawable-hdpi

それぞれのディレクトリへ bluehills.png という画像ファイルを設置したとした場合、

下記のように記述すればタブへ画像が表示されます。

//********************

// タブ1 設定

//********************

// タブの生成

TabSpec tab1 = tabHost.newTabSpec("tab1");

// タブに表示する文字列、アイコンをセット

tab1.setIndicator("タブ1", getResources().getDrawable(R.drawable.bluehills));

// タブ選択時に表示するビューをセット

tab1.setContent(R.id.contentlayout1);

// タブホストにタブを追加

tabHost.addTab(tab1);

画像ファイルが合っていないものを設定した場合、下記のようにテキストの下に画像が被ってきます。

試しに 100 x 100 px の画像ファイルを res/drawable-nodpi へ設置してタブへ表示させてみたところ、

このようになりました。

文字に被るような画像、または文字列も画像に含めてしまうようなタブを作る場合は、大きな画像サイズでも良いのかもしれない。

参考として TabHost.TabSpecクラスの setIndicator 関数は、

引数として渡すものを変えることにより以下の3種類があります。

タブへテキストのみを表示する

setIndicator(CharSequence label)

タブへテキストとアイコンを表示する

setIndicator(CharSequence label, Drawable icon)

タブを独自ビューによってカスタマイズする

setIndicator(View view)