【Android】Toastをカスタマイズして表示する【Java/Kotlin】

今回はToastをカスタマイズ してオリジナルのToastを表示してみようと思います。

デフォルトはシンプルで良いですが画像等を表示したい場合はToastをカスタマイズ する必要があります。

前準備

それではまずは前準備です。

Toastに表示するレイアウトXMLを作成する

まず、Toastに表示したいレイアウトXMLを作成します!

下記は画像+テキストのレイアウトXMLです。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:orientation="horizontal"
    android:background="#AAAAAA">

    <ImageView
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher" />  <- 今回はデフォルトで生成されるアプリアイコンを表示します

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_gravity="center"
        android:textColor="#FFFFFF" />

</LinearLayout>

ここで注意するポイントは上記レイアウトインスタンスを取得するために親レイアウトにidを付与する必要があります。

これで前準備は終了です。

ToastにレイアウトXMLを設定して表示する

あとはクラスファイルに下記を記述するだけでToastが表示できます。

// Toastに表示したいViewのインスタンスを取得
View layout = getLayoutInflater().inflate(R.layout.custom_toast, findViewById(R.id.container));
// Toastに表示したいView内部のTextViewのインスタンスを取得
TextView text = layout.findViewById(R.id.text);
// 文字を表示する
text.setText("カスタムしたToast");
// Toastのインスタンスを作成
Toast toast = new Toast(getApplicationContext());
// Toastの位置を調整
toast.setGravity(Gravity.BOTTOM, 0, 0);
// Toastの表示時間を設定
toast.setDuration(Toast.LENGTH_LONG);
// ToastにViewを設定
toast.setView(layout);
// Toastを表示
toast.show();
// Toastに表示したいViewのインスタンスを取得
val layout: View = layoutInflater.inflate(R.layout.custom_toast, findViewById(R.id.container))
// Toastに表示したいView内部のTextViewのインスタンスを取得
val text = layout.findViewById<TextView>(R.id.text)
// 文字を表示する
text.text = "カスタムしたToast"
// Toastのインスタンスを作成
val toast = Toast(applicationContext)
// Toastの位置を調整
toast.setGravity(Gravity.BOTTOM, 0, 0)
// Toastの表示時間を設定
toast.duration = Toast.LENGTH_LONG
// ToastにViewを設定
toast.view = layout
// Toastを表示
toast.show()

layoutInflater.inflateの第二引数に先ほど親レイアウトに付与したidをfindByViewIdしてあげましょう

これでレイアウトXMLのインスタンスを取得できます。

最後に

いかがでしたでしょうか

Toastに自分で作成したViewを設定してあげるだけでオリジナルのToastが作成できます。

色々なViewで試してみてください!

※ちなみにToastの内部にボタンタップイベントをデフォルトで無視する処理が組み込まれているためButton等をToastに設定してもボタンタップイベントはハンドリングできないので要注意!

コメント

タイトルとURLをコピーしました