У меня AlertDialog
работает нормально на большинстве устройств Android.Диалоговое окно отображается снизу с его макетом, и оно рисуется около нижнего края экрана.Однако на устройстве Xiaomi Mi 8 диалоговое окно зависает над нижним краем.Это устройство имеет закругленные углы экрана, и я думаю, что диалог пытается избежать их.Однако эстетически это выглядит ужасно плохо.Как создать диалоговое окно, чтобы оно отображалось у края экрана на всех устройствах, независимо от их углов экрана?
К сожалению, в stackoverflow есть вопросы о создании диалога с круглымиуглы, и я не могу найти ничего полезного.Наиболее близким был этот вопрос относительно строки состояния , но предложения там не изменили поведение диалога для AlertDialog
на Mi8.
Чтобы продемонстрировать проблему, которую я сделал минимальный пример проекта . При коммите 763bc62ff9320227b806260e861b63d48cc2347d на следующем снимке экрана показана проблема на Mi8, когда полноэкранный режим оставляет диалоговое окно , плавающее над краем экрана, и кажется, что оно делает некоторые странные вещис наложением вверху тоже.
![floating alertdialog on full screen vs normal display](https://i.stack.imgur.com/PRUGk.png)
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, который показываетчерная полоса во время анимации:
![Samsung SM-J530F black bar animation](https://i.stack.imgur.com/ExL4S.gif)
Чтобы избежать черной полосы в анимации, я нашел единственный способ сделать windowFullScreen = true
. Однако , когда для этого значения установлено значение true, Xiaomi создает странную анимацию строки состояния:
![enter image description here](https://i.stack.imgur.com/q92eP.gif)
Есть лиспособ сделать эту простую анимацию согласованной на всех устройствах Android без необходимости прибегать к нескольким жестко заданным условным выражениям?
ОБНОВЛЕНИЕ : Как было предложено, вместо анимации диалогового окна, которое я изменил в commit 403808dcfb5d3fae52c51eb1b21593b79065ada7 диалог, чтобы не анимировать и сам перемещал кнопку через наборы макетов ограничений:
![[!https://gitlab.com/gradha/stackoverflow53343622/wikis/uploads/8e7a47d939677277459619db6af27de3/mi8_buttons.gif]](https://i.stack.imgur.com/OyQ4K.gif)
![enter image description here](https://i.stack.imgur.com/mi4c8.gif)