デフォルトの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();
以上、おつかれさまでした。