ラベル Dialog の投稿を表示しています。 すべての投稿を表示
ラベル Dialog の投稿を表示しています。 すべての投稿を表示

2023年10月9日月曜日

Android Activityをダイアログぽく表示する方法を紹介

どうも。どっことです。今回はActivityをダイアログっぽく表示する方法を紹介します。

Activityをダイアログのように表示する

色々カスタマイズできるのは嬉しいDialogFragmentですが、実装が面倒で「それっぽければActivityで十分なんだよなぁ…」と思ってしまった私への、「ActivityだけでDialogぽい見た目の画面(というかダイアログ)の作り方」備忘録です。

最小限の設定の場合

対象のActivityに以下のThemeを設定するだけです。

Theme.MaterialComponents.DayNight.Dialog

DialogFragmentStyleとして設定される値を、Activityに設定してあげるだけです。本当にそれっぽくできるだけで、これだけだと決定もキャンセルもなにもないのでレイアウト側で追加の実装が必要となります。

色々カスタマイズしたい場合

Themeを継承してカスタマイズします。

最低限の設定を参考にダイアログぽいものを実装するとテーマの設定が引き継がれていないため、他のActivityと統一感が取れていないダイアログが表示されます。レイアウト側で調整すればなんとかなりますが、いい感じの統一感を目指すならThemeを意識したカスタマイズが必要となります。

Theme.MaterialComponents.DayNight.Dialogの継承元を追っていくと分かりますが、ダイアログぽいActivityにしてくれるこのテーマはいくつかの属性が設定されています。以下抜粋。もしかしたら漏れてるかも。

<item name="android:windowFrame">@null</item>
<item name="android:windowTitleStyle">@style/RtlOverlay.DialogWindowTitle.AppCompat</item>
<item name="android:windowTitleBackgroundStyle">@style/Base.DialogWindowTitleBackground.AppCompat</item>
<item name="android:windowBackground">@drawable/abc_dialog_material_background</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@style/Animation.AppCompat.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>

アプリ共通のテーマを継承しつつ、これらの設定をテーマに設定することで、統一感のあるダイアログを実装することができます。

まとめ

今回はActivityをダイアログぽく表示する方法について紹介しました。DialogFragmentは実装に少しクセがあるコンポーネントなので、単に表示するだけなら今回の設定で簡単に実装することができます。ただ、ここまで書いてていまさらだが、Activityをダイアログとして表示するのはAndroidのお作法的に正直あまりオススメしません。用法用量を守って計画的に。

移行予定

どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。