Простые Android-тосты не выравниваются должным образом

Я просто звоню из своего Activity:

Toast.makeText(this, "This is a toast", Toast.LENGTH_SHORT).show()

Но результатом является текст, выровненный в верхней части контейнера для тостов, а не внутри него:

enter image description here

Любые идеи о том, что может быть неправильным?

Ответ 1

Мне удалось это исправить. Проблема заключается в применении атрибута android:fitsSystemWindows к теме активности. Я нашел этот ответ, который объясняет, почему это не должно быть сделано:

Атрибут android:fitsSystemWindows предназначен для использования в представлениях в макете xml, а не в темах.

То, что вы видите, - это эффект от атрибута стиля система работает в Android. Если в представлении не указан атрибут элемент или в явном стиле, заданном представлению, структура проверяет, указан ли этот атрибут в теме сам. Если он найден там, это значение используется. Поскольку используемые виды тосты используют вашу тему активности, значение false по умолчанию переопределяется, и вы видите это поведение.

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

Просто примените атрибут к самому верхнему ViewGroup активности (или стилю) вместо своей темы, и тост будет отформатирован правильно.