デフォルトのToastはテキストを表示するだけのシンプルなものですが、
下の図のようにテキストと一緒に画像を表示するなど、ちょっと凝ったToastを作ることも可能です。
今回はToastのカスタマイズ方法についてご紹介したいと思います。
詳細は続きからどうぞ。
レイアウトの定義
カスタマイズしたToastを作るには、まずToastのレイアウトを定義します。
上の図のようなレイアウトにしたい場合、以下のようなxmlファイル(toast_layout.xml)を作成します。
ImageViewとTextViewを定義しておきます。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dip" android:background="#FFFFFF" > <ImageView android:id="@+id/image" android:layout_width="64dip" android:layout_height="64dip" android:layout_marginRight="10dip" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000000" /> </LinearLayout>
Toastにカスタムレイアウトを設定する
プログラム上ではLayoutInflater#inflateメソッドを使ってtoast_layout.xmlからViewを作成します。
LayoutInflaterクラスはxmlファイルの定義に従ってViewを生成する際に利用されるクラスで、
LayoutInflater#inflateメソッドを使うと指定したxmlファイルから動的にViewを生成することが可能です。
// インフレータを取得する LayoutInflater inflater = getLayoutInflater(); // カスタムToast用のViewを取得する View layout = inflater.inflate(R.layout.toast_layout, null); // ImageViewを取得して任意のイメージを設定する ImageView image = (ImageView) layout.findViewById(R.id.image); image.setImageResource(R.drawable.img001); // TextViewを取得して任意のテキストを設定する TextView text = (TextView) layout.findViewById(R.id.text); text.setText("このようにToastをカスタマイズできます。");
getLayoutInflaterメソッドを使ってLayoutInflaterを取得し(2行目)、
LayoutInflater#inflateメソッドでtoast_layout.xmlからViewを作成しています(5行目)。
生成したViewを使えばImageViewとTextViewに画像とテキストを設定することができます(8, 12行目)。
あとはToast#setViewメソッドでカスタマイズしたレイアウトを設定してToastを表示します。
// Toastにカスタマイズしたレイアウトを設定して表示する Toast toast = new Toast(this); toast.setView(layout); toast.show();
以上、おつかれさまでした。