2013年8月8日木曜日

alertdialog.builderを使ったdialogfragmentのthemeを変更して表示したい

やってみた。

ケース
あるFragmentからDialogFragmentを呼び出して、
themeをholo.lightからholo(白から黒へ)にする。

方法1
onCreateでthis.setStyle(style,theme)
onCreateDialogで自前のレイアウトいれる。
結論
だめだった。白いまんま。


方法2
onDialogCreateでContextWrapperを作成し、
そいつにsetStyleしたものでAlertDialog.builder。
白から黒になった。やったねたえちゃんry
結論
実はだめだったりする。
ListFragmentのonListItemClickから呼び出したのだけど、
DialogFragmentが表示されている状態で画面回転すると、
ListFragment内のアダプター内のViewの表示がおかしい。
ログで確認するとDialogFragmentで当てたContextWrapperの影響を受けていた。
再度回転すると元の表示に戻るんだけどね。
調査がめんどくさかったので、それ以上調べてません。
何やかんややればできるだろうけど、設定がオンリーワンすぎて使いにくい。

方法3
onListItemClickで別Activityを起動。
マニフェストで背景を透明に設定。
styleをtheme_holo_noactionbarに設定。
表示したいものをIntentで渡して、タグなりなんなりでDialogFragmentを出す。
Activityを使うと他のサービスとかからも呼び出せて便利かなー。
でも、ListView扱うときにちょっと難儀かもしれない。

方法4
そもそもAlertDialogを使わない。Dialogでいい。
onCreateViewでレイアウトいれるなら白から黒になる。

0 件のコメント:

コメントを投稿