У меня AlertDialog
отлично работает на большинстве устройств Android. Диалоговое окно отображается снизу с его макетом и рисуется у нижнего края экрана. Однако на устройстве Xiaomi Mi 8 диалоговое окно зависает над нижним краем. У этого устройства закругленные углы экрана, и я думаю, что диалоговое окно пытается их избежать. Однако эстетически это выглядит ужасно. Как создать диалоговое окно, чтобы оно появлялось у края экрана на всех устройствах, независимо от угла экрана?
К сожалению, stackoverflow заполнен вопросами о создании диалога с закругленными углами, и я не могу найти ничего полезного. Самым близким был этот вопрос относительно строки состояния, но предложения поведение диалога для AlertDialog
на Mi8 не изменилось.
Чтобы продемонстрировать проблему, я сделал минимальный пример проекта. При коммите 763bc62ff9320227b806260e861b63d48cc2347d> на следующем снимке экрана на полном экране Mi проблема, оставляет диалоговое окно плавающим над краем экрана, и кажется, что он делает что-то странное с наложением вверху.
Xiaomi Mi8 выдвигает AlertDialog выше углов экрана, потому что AlertDialog объявлен плавающим. После изменения стиля на windowIsFloating = false
диалоговое окно появится у края экрана:
<style name="Dialog" parent="Theme.AppCompat.Dialog.Alert">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowIsFloating">false</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@style/MapDialogAnimation</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowMinWidthMajor">100%</item>
<item name="android:windowMinWidthMinor">100%</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<!-- https://stackoverflow.com/a/28341624/172690 -->
<item name="android:fitsSystemWindows">true</item>
</style>
К сожалению, это решение работает для Xiaomi, но не для другого Samsung SM-J530F, который показывает черную полосу во время анимации:
Чтобы избежать черной полосы в анимации, единственный способ, который я нашел, это сделать windowFullScreen = true
. Однако, когда для этого значения установлено значение true, Xiaomi делает странную анимацию строки состояния:
Есть ли способ сделать эту простую анимацию согласованной на всех устройствах Android, не прибегая к нескольким жестко запрограммированным условным выражениям?
ОБНОВЛЕНИЕ. Как было предложено, вместо анимации диалогового окна я изменил commit 403808dcf79ada5d3beb1fae52c чтобы диалоговое окно не анимировалось, и сам переместил кнопку через наборы макетов ограничений: