8

デフォルトのトーストを変更して、カスタム レイアウトを作成せずにトーストをカスタマイズしたいと考えています。トーストの背景に赤い色、トーストのテキストの色に白い色が必要で、トーストの背景をデフォルトのトーストよりも大きくしたいです。アプリケーションを実行すると、トーストから何も変更されず、デフォルトのトーストに表示されます。

これは、トーストをカスタマイズする方法です。

if (seriesSelection == null) {
    Toast toast = Toast.makeText(getApplicationContext(), "tidak ada chart yang dipilih", Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.CENTER, 50, 50);
    toast.getView().setPadding(10, 10, 10, 10);
    toast.getView().setBackgroundColor(Color.RED);
    TextView text = (TextView) toast.getView().findViewById(android.R.id.message);
    text.setTextColor(Color.WHITE);
    text.setTextSize(14);
} else {
    Toast toast=  Toast.makeText(
            getApplicationContext(),
            "Nilai " + listData.get(seriesSelection.getPointIndex()).getInuNilai()+
            "  tanggal " + listData.get(seriesSelection.getPointIndex()).getTanggal(), 
            Toast.LENGTH_SHORT); 
    toast.setGravity(Gravity.CENTER, 50, 50);
    toast.getView().setPadding(10, 10, 10, 10);
    toast.getView().setBackgroundColor(Color.RED);
    text.setTextColor(Color.WHITE);
    text.setTextSize(14);
    toast.show();
}
4

3 に答える 3

10

カスタム ビューでカスタム ビューを膨張させ、 を使用することができますtoast.setView(layout)

例:

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

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();

そしてあなたのxml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/toast_layout_root"
              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>

より詳しい情報 @

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

コードの if 部分と else 部分を (別々に) 実行すると、トーストが赤の背景と白のテキスト色で表示されます。問題はありません。ただし、カスタマイズする必要がある場合は、カスタム レイアウトを使用してレイアウトを拡張し、ビューをトーストに設定できます。

編集:

あなたのテキストビュー

  TextView text = (TextView) toast.getView().findViewById(android.R.id.message);

if 部分で初期化され、else 部分で textview が初期化されません。

if および else コードの外側で textview を初期化します。

あなたが役に立つかもしれないクルトンと呼ばれるこのライブラリをチェックしてください

https://github.com/keyboardsurfer/クルトン

于 2013-07-23T03:40:54.200 に答える
2

トーストにはsetView()方法があります。

Toast をカスタマイズして、任意のビューを表示できます。

Toast 内でビューを編集しようとする代わりに、ビューを作成して自分でポップするだけです。

于 2013-07-23T03:34:29.200 に答える
0

それに応じてトーストをカスタマイズするための非常にシンプルで簡単なコードがあります。トーストの背景とテキストの色も変更できます。

 Toast toast = Toast.makeText(MainActivity.this, "Added successfully", Toast.LENGTH_LONG);
    View view = toast.getView();
    view.setPadding(20, 20, 20, 20);
    view.setBackgroundResource(R.color.GREEN);
    view.setTextColor(Color.RED);
    toast.show();
于 2017-06-09T12:22:14.883 に答える