0

AlertDialogほとんどの Android デバイスで正常に動作しています。ダイアログはそのレイアウトで下から表示され、画面の下端近くに描画されます。ただし、Xiaomi Mi 8 デバイスでは、ダイアログが下端の上に表示されます。このデバイスは画面の角が丸くなっており、ダイアログはそれを避けようとしていると思います。しかし、これは審美的にひどく悪いように見えます。画面の隅に関係なく、すべてのデバイスで画面の端近くに表示されるようにダイアログを作成するにはどうすればよいですか?

残念ながら、stackoverflow は角の丸いダイアログを作成することに関する質問でいっぱいで、役立つものは何も見つかりません。最も近いのはステータスバーに関するこの質問AlertDialogでしたが、そこにある提案は Mi8のダイアログの動作を変更しませんでした。

問題を紹介するために、最小限のサンプル プロジェクトを作成しました。コミット 763bc62ff9320227b806260e861b63d48cc2347dで、次のスクリーンショットはMi8の問題を示しています。フル スクリーン モードでは、ダイアログが画面の端からはみ出してしまい、上部のオーバーレイでも奇妙なことをしているように見えます。

全画面表示と通常表示のフローティングアラートダイアログ

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 ブラックバー アニメーション

アニメーションの黒いバーを避けるために、私が見つけた唯一の方法は、windowFullScreen = true. ただし、この値が true に設定されている場合、Xiaomi は奇妙なステータス バー アニメーションを作成します。

ここに画像の説明を入力

いくつかのハードコードされた条件に頼ることなく、この単純なアニメーションをすべての Android デバイスで一貫させる方法はありますか?

更新: 提案されているように、ダイアログをアニメーション化する代わりに、コミット 403808dcfb5d3fae52c51eb1b21593b79065ada7でダイアログをアニメーション化しないように変更し、制約レイアウト セットを使用してボタンを自分で移動しました。

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

ここに画像の説明を入力

4

1 に答える 1