iOS開発者のAndroid開発入門ポップ色々その4(Dialog編)

botman3 Android

はじめに

Android のダイアログとかポップぽいものを Popup としてまとめました。その2!!
今回は Dialog について!よく使いそうなやつだけどハマりポイントがめっちゃ多い。。。

ソースは github にあげてます↓↓↓
ソース(github)

Dialog

ダイアログ表示するやつ(たぶん iOS でいう UIAlertController だと思う)
よく下記のような実装をみるけどこれだと画面回転時にクラッシュするので毎回 DialogFragment を使わないといけないらしい。。。(わりとめんどくさい。。。)

実装

標準

標準のダイアログ表示(タイトル、メッセージ、ポジティブボタン、ネガティブボタン、ニュートラルボタンの表示)たぶんボタンの並び順は OS バージョンで異なる

パターン1 パターン2 パターン3 パターン4
dialog1 dialog2 dialog3 dialog4

Activity 側の実装

汎用的にしようと思うとこんな感じになってしまう。。。ボタン押下時のイベントを取りたい場合はリスナーを使用するがセッターを用意して下記のようにすると画面回転時に Activity が再生成されるので登録したリスナーがnullになってしまう。。。解決策としてはリスナーを onAttach で設定するしかないように思う。(使い勝手悪い。。。)

リスト

dialog_list

Activity 側

ラジオボタン

dialog_radio

Activity 側

チェックボックス

dialog_checkbox

Activity 側

カスタム

xml で View を指定してカスタムもできる。ボタンとかもカスタムできるけどそこをカスタムするのはどうなんだろう??(positiveButton とか使わずに Button を置いてそっちのイベントを取ればいける)

dialog_custom

custom_dialog.xml

Activity 側

Activityをダイアログ表示する

マニフェストファイルの指定の Activity を下記のように設定すると Activity をダイアログ表示できる。

AppCompatActivity を継承しているとクラッシュしたけど Activity を継承させると下記のように表示された。(ToastActivityを一時的に書き換えて表示したやつ)

dialog_activity

ProgressDialog (2020/07/30追記)

ProgressDialog というのもあるがわりと前に非推奨になった。代替クラスは特になくそもそも下記のようにユーザーの操作を妨げる UI はやめろということらしい

注意:Android には、進行状況バーを含むダイアログを表示する ProgressDialog という別のダイアログ クラスがあります。このウィジェットは、ユーザーが進捗の表示中はアプリを操作できないため、非推奨となっています。読み込み中または不確定な進捗状況を表示する必要がある場合は、Progress & Activity のデザイン ガイドラインに従って、ProgressDialog を使用する代わりに、レイアウトで ProgressBar を使用してください。

とはいっても通信中とかに表示したい場合は DialogFragment で自作するしかない。。。

こんな感じ

ProgressDialog 自作ダイアログ
original custom

custom_progress_dialog.xml

Activity 側

参照

さいごに

iOS に比べるとカスタム性が非常に高いけどちょっと高すぎて悩んでしまう感じがする。(なんでもできちゃいそうなのでお客さんに仕様上無理です!とか言いづらそう。。。)
Android は iOS と同じ感覚でやっちゃうとハマるので気をつけた方がよさそう。特に画面回転とか。。。

コメント

タイトルとURLをコピーしました