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