【連載】Androidアプリ道場(第1回)~ダイアログの表示~

 

f:id:PSYuki:20170606225016p:plain
記念すべきAndroidアプリ道場の第1回はダイアログを重ね合わせるときのコツを紹介します。

Androidに限らず、ダイアログウィンドウはアプリ開発に無くてはならないウィジットの1つです。

 

Androidにもダイアログは何種類か用意されているのですが、ハマりポイントがあるので、抑えておきましょう。

 

 

サンプルアプリはソースコードが手元にある「レシピ検索@COOKPAD(みなレシ)」を使います。

 

 

ダイアログウィンドウを使うときの注意点

ダイアログの中でも必ず使うといっても過言ではない AlertDialog を使ってレシピ動画を表示してみました。

 

f:id:PSYuki:20170606225737p:plain

 

「くっ、暗いな…」

と思った方は正解です。画面中央の白枠が AlertDialogのウィンドウになります。その中の料理動画の画面が暗い(背面のアプリ画面と同じ暗さ)です。

 

期待している明るさはこちら。

f:id:PSYuki:20170606230109p:plain

 

全然違いますね。

 

この違いが何故起きるのか、その理由はダイアログが表示されるViewがメインウィンドウの背景に回り込んでしまうため、メインウィンドウ同様に暗くなってしまうというもの。

 

解決方法

メインウィンドウの手前にダイアログウィンドウが表示されるように setZOrderOnTopをtrueに設定する(青字部分を追記)。

 

[ 修正前 ]

VideoView videoView = (VideoView)v.findViewById(R.id.video_recipe_view);

videoView.setVideoURI(Uri.parse("{Path to movie}"));
videoView.start();

new AlertDialog.Builder(MinaReciMainAct.this).setView(v).show();

 

 

[ 修正後 ]

VideoView videoView = (VideoView)v.findViewById(R.id.video_recipe_view);

videoView.setVideoURI(Uri.parse("{Path to movie}"));
videoView.setZOrderOnTop(true);
videoView.start();

new AlertDialog.Builder(MinaReciMainAct.this).setView(v).show();

 

これで上のように明るい動画がダイアログウィンドウで表示されるようになります。ダイアログウィンドウのコンテンツが動画であっても写真のような静止画であっても同じ効果が得られます。

 

「ちょっと暗いな~」

 

という場合は、setZOrderOnTop の設定を調べましょう。