Programming Style

メニュー

初心者がアプリ開発者になるためのプログラミング学習サイト

[Android] Toast:トーストのレイアウトをカスタマイズする

android_android-toast-customize_01

トーストは短いテキストを通知するポップアップです。もしそれだけでは情報が十分でない場合、トーストのレイアウトをカスタマイズすることができます。ここではトーストのレイアウトをカスタマイズする方法を説明します。

 

広 告

 

目次

前提条件

  • トーストの表示方法を理解していること

動作確認端末

  • Google Nexus 5 – 5.0.0 – API21(エミュレータ)

1. トーストのレイアウトをカスタマイズする

トーストのレイアウトをカスタマイズするためには、レイアウトXML、もしくはJavaコードでレイアウト定義し、そのViewオブジェクトをToast#setView(View)メソッドに渡します。

ここでは例として、レイアウトXMLで定義する方法で説明します。まず以下のように、左側にアイコン、右側にテキストを表示するレイアウトを用意します。ファイル名はtoast_layout.xmlとします。

 

res/layout/toast_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_layout_root"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    android:background="#DAAA"
    >
    <ImageView android:src="@android:drawable/sym_def_app_icon"
        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>

次にJavaコード側の実装内容についてです。Java側でレイアウトXMLからViewオブジェクトを取得するためには、LayoutInflateを使います。LayoutInflategetLayoutInflate()メソッドもしくはgetSystemService(LAYOUT_INFLATER_SERVICE)メソッドから取得することができます。このLayoutInflateオブジェクトのinfalte(int, ViewGroup)メソッドの戻り値が、レイアウトXMLのViewオブジェクトです。infalte(int, View)メソッドのパラメータについて以下のとおりです。

 

 

説明
第1引数 int レイアウトXMLのリソースID
第2引数 ViewGroup レイアウトのルートViewGroupオブジェクト

最後にToast(Context)コンストラクタからオブジェクトを作成した後、setView(View)メソッドにレイアウトのViewオブジェクトを設定し、show()メソッドを実行することで、レイアウトをカスタマイズしたトーストが表示されます。

以上をまとめたサンプルコードは以下のとおりです。

 

java/<package name> /MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        final View layout = inflater.inflate(R.layout.toast_layout,
                (ViewGroup) findViewById(R.id.toast_layout_root));
        final TextView text = (TextView) layout.findViewById(R.id.text);
        text.setText("カスタムトーストを表示");

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

実行すると以下のようなになります。

 

android_android-toast-customize_01
Note : setView(View)メソッドを使ってレイアウトを定義する場合、Toastオブジェクトはコンストラクタから作成します。setView(View)を使用しない場合は、makeText()メソッドからToastオブジェクトを作成しなければなりません。

 

広 告