如何使AlertDialog显示在屏幕边缘附近

时间:2018-11-16 18:39:40

标签: android android-alertdialog xiaomi

我有一个AlertDialog在大多数android设备上都能正常工作。该对话框及其布局从底部开始显示,并绘制在屏幕底部边缘附近。但是,在小米Mi 8设备上,对话框悬停在底部边缘上方。该设备的屏幕角是圆角的,我认为对话框正在尝试避免。然而,这在美学上看起来非常糟糕。如何创建对话框,使该对话框出现在所有设备中的屏幕边缘附近,而不管它们的屏幕角落如何?

不幸的是,stackoverflow充满了有关制作带有圆角的对话框的问题,我找不到任何有用的东西。最接近的是this question regarding the status bar,但是那里的建议并没有改变Mi8上AlertDialog的对话框行为。

为展示问题,我做了a minimal example projectAt commit 763bc62ff9320227b806260e861b63d48cc2347d以下屏幕截图显示了Mi8上的问题,其中全屏模式使对话框浮动悬浮在屏幕边缘上方,并且看起来覆盖层做得有些奇怪在顶部。

floating alertdialog on full screen vs normal display

小米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>

不幸的是,此解决方案适用于小米,但不适用于另一台三星SM-J530F,后者在动画中显示黑条:

Samsung SM-J530F black bar animation

为了避免动画中出现黑条,我发现的唯一方法是制作windowFullScreen = true但是,当此值设置为true时,小米会制作一个奇怪的状态栏动画:

enter image description here

是否有任何方法可以使这种简单的动画在所有android设备上保持一致,而不必诉诸几个硬编码的条件?

更新:如建议的那样,我没有在commit 403808dcfb5d3fae52c51eb1b21593b79065ada7中更改对话框的动画,而是使对话框不动画,并且自己通过约束布局集移动了按钮:

[!https://gitlab.com/gradha/stackoverflow53343622/wikis/uploads/8e7a47d939677277459619db6af27de3/mi8_buttons.gif]

enter image description here

1 个答案:

答案 0 :(得分:1)

最好的解决方案是对视图进行动画处理,而不是片段,对话框或您正在使用的任何内容的过渡。