Как настроить фон, цвет фона и цвет текста для Toast в Android

Я хочу настроить свое всплывающее уведомление, не создавая собственный макет, изменив тост по умолчанию. Мне нужен красный цвет для фона тоста и белый цвет для цвета текста тоста, и я хочу, чтобы фон моего тоста был больше, чем тост по умолчанию. когда я запускаю свое приложение, в моем тосте ничего не меняется, он все еще отображается в тосте по умолчанию.

Вот как я настраиваю свой тост:

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

person Aoyama Nanami    schedule 23.07.2013    source источник
comment
Для меня в случае «else» отображается красный тост с белым текстом с примененными отступами.   -  person sandrstar    schedule 23.07.2013


Ответы (3)


У вас может быть настраиваемое представление, расширяющее настраиваемое представление и использующее 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, а в части textview не инициализируется.

Инициализировать текстовое представление вне кода if и else.

Проверьте эту библиотеку под названием crouton, которая может оказаться полезной.

https://github.com/keyboardsurfer/Crouton

person Raghunandan    schedule 23.07.2013
comment
Я хочу настроить свое всплывающее уведомление, не создавая собственный макет, изменив тост по умолчанию. могу я? - person Aoyama Nanami; 23.07.2013
comment
@AoyamaNanami, вы можете проверить сообщение выше. также ваш код работает нормально, я вижу тост с красным фоном и белым текстом. Итак, в чем именно проблема. я не могу воспроизвести вашу проблему. Я запустил ваш код, скопировав его. это работает нормально. Использование пользовательского макета даст вам больше возможностей для настройки. - person Raghunandan; 23.07.2013

У Toast есть метод setView(). .

Вы можете настроить Toast для отображения любого представления.

Я бы сказал, что вместо того, чтобы пытаться редактировать представление внутри Toast, вы просто создаете представление и вставляете его в себя.

person Kevin    schedule 23.07.2013
comment
Можете ли вы сказать, как это сделать? - person Aoyama Nanami; 23.07.2013

У меня есть очень простой и легкий код для соответствующей настройки тоста, вы также можете изменить фон тоста и цвет текста.

 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();
person Jatin Raghav    schedule 09.06.2017