AndroidでToastの背景色を変える方法

2019年5月16日

実装方法は大枠にわけて2つあります。

  1. Javaコードでview.setBackgroundColorを使用して背景色を指定。
  2. Xmlコードでtoast_layout.xmlを作成して、その中で背景色を指定。

それぞれにメリット/デメリットがありますので見ていきましょう。

実装方法 メリット デメリット
Javaコードでview.setBackgroundColorを使用して背景色を指定 Javaコード内で処理が完結のため工数がかからない toastのJavaコードをスーパークラスで定義しない場合において、
他画面でもtoastを使用する際、同様のロジックが他のactivity、fragmentに存在することになり保守が煩雑になる。
Xmlコードでtoast_layout.xmlを作成して、その中で背景色を指定。 toastを複数画面で用いてかつtoastのレイアウトが共通な場合において、レイアウト(Xml)ファイルを共通化することが出来るためtoastのレイアウト保守が容易になる。 管理するレイアウト(Xml)ファイルが増えることでアプリ容量がレイアウトファイル分だけ増加する。

本稿では、まず最初にJavaコード内でview.setBackgroundColorを使用して、

背景色を変更する方法を説明します。

 

 

JavaコードでsetBackgroundColorを使用する方法

public void onClick(View v) {
    Toast t = Toast.makeText(v.getContext(), "toast の背景色を変更", Toast.LENGTH_LONG);
    View v = t.getView();
   //
 v.setBackgroundColor(Color.rgb(255,20,147));
 t.show();
}

Xmlコードでlayoutファイルを作成して背景色を指定する方法

次に、Xmlコードでtoast_layout.xmlを作成して背景色を変更する方法を説明します。

まずは、Javaコードにて背景色を変えたいtoastにレイアウトファイルを設定します。

public void onClick(View v) {
    // インフレータを取得する
 LayoutInflater inflater = getLayoutInflater();
 
 // カスタムToast用のViewを取得する
    // R.layout.toast_layoutの内容は口述
 View layout = inflater.inflate(R.layout.toast_layout, null);
 
 
 // TextViewを取得して任意のテキストを設定する
 TextView text = (TextView) layout.findViewById(R.id.text);
 text.setText("Toastのカスタマイズ。");
 
 // Toastにカスタマイズしたレイアウトを設定して表示する
 Toast toast = new Toast(this);
 toast.setView(layout);
 toast.show();
   break;
  }
 }
}

Xmlコードのandroid:backgroundにて背景色を設定する

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#ff9900"
                    android:orientation="horizontal"
                    android:padding="10dip" &gt;
    <textview android:id="@+id/text"
              android:layout_height="match_parent" 
              android:layout_width="wrap_content" 
              android:textcolor="#000000">
</textview></imageview>