Android Toast перемещается по экрану

В моем приложении Android отображаются несколько сообщений Toast. Недавно я установил его на Galaxy S6, работая под управлением Android 5.1.1, и заметил, что сообщения отображаются сначала по центру экрана, затем они перемещаются в правильное положение (около дна, если нет гравитации), затем вернитесь к первоначальное положение перед угасанием.

Context context = getApplicationContext();
String newMsg = getString(R.string.wild_card_msg);
Toast mToast = Toast.makeText(context, newMsg, Toast.LENGTH_LONG); 
mToast.setGravity(Gravity.CENTER, 0, 0);
mToast.show(); 

Update:

  • Я обновил библиотеки поддержки, а также установил компиляцию-sdk и целевой sdk в новейший API. Это не устранило проблему.
  • Я удалил все вызовы .setGravity(). Без изменений.
  • Я заметил, что сообщения Toast ведут себя должным образом при первом выполнении после установки (будь то в режиме отладки USB или при загрузке из PlayStore), но проблема повторяется во всех последующих запусках.
  • Я также обнаружил, что мои сообщения Toast немедленно исчезают, если я касаюсь экрана (где угодно). Я думал, что на дисплеях Toast не может влиять взаимодействие пользователя.

У кого-нибудь еще есть эта проблема, знаете, как ее исправить или знаете обходное решение?

Обратите внимание, что я принял ответ Ника, предлагая snackBar как обходной путь.

Ответы

Ответ 1

В вашем вопросе исправлено или обходное решение. Простейшим обходным решением является (на мой взгляд) и лучший вариант, поскольку он переводит вас на использование более современных компонентов: перейдите в закусочную.

Простая закутка:

//on a fragment you can simply use getView(), otherwise give it the root view of your
//layout so that the snackbar can use it to find context

Snackbar.make(getView(), "The toast text", Snackbar.LENGTH_SHORT).show();

В библиотеке поддержки поддержки для совместимости.

Это закутка:

введите описание изображения здесь

И некоторые библиотеки поддержки/дизайна, которые могут быть включены в gradle,

compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'

Ответ 2

Это из-за настроенной версии Android, которую вендоры развертывают с помощью своих продуктов. Это верно и для анимации активности, Вы можете добиться желаемого поведения на всех устройствах, расширив класс Toast и предоставив свою собственную анимацию и стиль или используя библиотеку с открытым исходным кодом для отображения тостов-сообщений, поскольку действия, настраивающие настраиваемую анимацию для действий, создают постоянную анимацию на всех устройствах.

Ответ 3

попробуйте этот простой Toast

Toast.makeText(getApplicationContext(),"Your message", Toast.LENGTH_SHORT).show();