The Android Developer Challenge is back! Submit your idea before December 2.

トーストの概要

トーストは、操作に関する簡単なフィードバックを小さなポップアップに表示します。トーストでは、メッセージの表示に必要なスペースのみを使用します。現在のアクティビティは表示されたままになり、引き続き操作することができます。トーストはタイムアウト後に自動的に消えます。

たとえば、メールで [送信] をクリックすると、以下の画面キャプチャのように [メールを送信しています...] というトーストが表示されます。

ユーザーがステータス メッセージに応答する必要がある場合は、通知を使用することを検討してください。

基本的な使い方

まず、makeText() メソッドのいずれかを使用して Toast オブジェクトをインスタンス化します。このメソッドに、アプリの Context、テキスト メッセージ、トーストの表示期間という 3 つのパラメータを指定すると、適切に初期化された Toast オブジェクトが返されます。次の例に示すように、show() を使用してトースト通知を表示できます。

Kotlin

    val text = "Hello toast!"
    val duration = Toast.LENGTH_SHORT

    val toast = Toast.makeText(applicationContext, text, duration)
    toast.show()
    

Java

    Context context = getApplicationContext();
    CharSequence text = "Hello toast!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    

この例には、ほとんどのトースト通知に必要な要素がすべて示されています。他に必要なものはほとんどありません。ただし、トーストの位置を変えたり、単純なテキスト メッセージの代わりに独自のレイアウトを使用したりすることはできます。以降のセクションでその方法について説明します。

また、次のようにメソッドを連結すると、Toast オブジェクトを保持せずに済みます。

Kotlin

    Toast.makeText(context, text, duration).show()
    

Java

    Toast.makeText(context, text, duration).show();
    

トーストの配置

標準的なトースト通知は、画面下部の中央付近に表示されます。この位置は setGravity(int, int, int) メソッドで変更できます。このメソッドでは 3 つのパラメータ(Gravity 定数、X 位置のオフセット、Y 位置のオフセット)を指定できます。

たとえば、トーストを左上隅に表示する場合は、Gravity を次のように設定します。

Kotlin

    toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
    

Java

    toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
    

位置を右に移動する場合は、2 番目のパラメータの値を大きくします。下に移動するには、最後のパラメータの値を大きくします。

カスタムのトーストビューの作成

簡単なテキスト メッセージでは物足りない場合は、トースト通知用にレイアウトをカスタマイズできます。カスタム レイアウトを作成するには、XML またはアプリのコードで View レイアウトを定義して、ルート View オブジェクトを setView(View) メソッドに渡します。

次のスニペットには、トースト通知用にカスタマイズされたレイアウトが含まれています(layout/custom_toast.xml として保存されます)。

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_container"
                  android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="8dp"
                  android:background="#DAAA"
                  >
        <ImageView android:src="@drawable/droid"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="8dp"
                   />
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:textColor="#FFF"
                  />
    </LinearLayout>
    

LinearLayout 要素の ID に「custom_toast_container」が指定されていることに注目してください。レイアウトをインフレートするには、以下に示すように、この ID と XML レイアウト ファイル「custom_toast」の ID を使用する必要があります。

Kotlin

    val inflater = layoutInflater
    val container: ViewGroup = findViewById(R.id.custom_toast_container)
    val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "This is a custom toast"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
    

Java

    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.custom_toast,
                    (ViewGroup) findViewById(R.id.custom_toast_container));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("This is a custom toast");

    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.show();
    

まず、getLayoutInflater()(または getSystemService())を使用して LayoutInflater を取得し、その後で inflate(int, ViewGroup) を使用して XML からレイアウトをインフレートします。最初のパラメータはレイアウトのリソース ID、2 番目のパラメータはルート View です。このインフレートされたレイアウトを使用すると、レイアウト内の View オブジェクト数を増やすことができます。これで、ImageView 要素と TextView 要素のコンテンツをキャプチャして定義することができます。最後に、Toast(Context) を使用して新しい Toast を作成し、トーストのプロパティ(Gravity、期間など)を設定します。さらに、setView(View) を呼び出して、インフレートしたレイアウトを渡します。これで、show() を呼び出してカスタム レイアウトのトーストを表示することができます。

注: setView(View) を使用してレイアウトを定義する場合を除き、Toast のパブリック コンストラクタは使用しないでください。使用するカスタム レイアウトがない場合は、makeText(Context, int, int) を使用して Toast を作成する必要があります。