web-dev-qa-db-ja.com

AndroidカスタムPopupWindow / Dialog

デフォルトのAndroid UIコントロール(タイトル、背景、ボタンなど)を使用せずに、完全にカスタムのダイアログまたはポップアップウィンドウを取得しようとしています。

これは可能ですか?私はこれを探すのに何時間も費やしましたが、運がありません...これは簡単に可能であるように思われますが、私はそれを見つけることができません。

できれば、これはXMLからのビューを膨らませることによるものですが、この時点でうまくいくものは何でもいいでしょう。

ありがとう。

14
benvd

私が取ったステップ:

  1. Dialog を拡張するクラスを作成します。
  2. OnCreateで、setContentView(x, y)を呼び出します。xをR.layout、yをR.style.popupStyleとします(以下を参照)。
  3. Res/values/style.xmlで、デフォルトのDialogWindowスタイルをオーバーライドする必要があります。これを親とするスタイルを作成しようとしましたが、それでもすべてのデフォルトがクリアされませんでした。そこで、Android git treeをチェックして、デフォルトのスタイルを取得し、それをコピーして貼り付けました。これは次のとおりです。
<style name = "Theme.Dialog"> 
 <item name = "Android:windowFrame"> @null </ item> 
 <item name = "Android:windowTitleStyle"> @Android:style/DialogWindowTitle </ item> 
 <item name = "Android:windowBackground">​​ @Android:drawable/panel_background </ item> 
 <item name = "Android:windowIsFloating"> true </ item > 
 <item name = "Android:windowContentOverlay"> @null </ item> 
 <item name = "Android:windowAnimationStyle"> @Android:style/Animation.Dialog </ item> 
 <item name = "Android:windowSoftInputMode"> stateUnspecified | AdjustPan </ item> 
 </ style>

いくつかのエラーが発生します。公式のAndroid styles.xmlファイルとthemes.xmlファイルからさらに多くのものをコピーして解決してください。私のstyles.xmlファイルの内容は次のとおりです。 http://Pastebin.com/RRR15YYS

それはあなたに白いポップアップを与えるだけで、境界線も何もありません。カスタマイズを開始します。 :)

私を正しい軌道に乗せてくれたmbairdに感謝します。

[編集]自分の答えをもう一度調べる必要があり、公式のAndroidスタイル/テーマファイルを検索するのに少なくとも10分を費やしたので、今後の参考のためにここにあります: styles.xml および themes.xml

28
benvd

AlertDialog を本当にカスタマイズしようとしているようです。 Activity を拡張するクラスを作成する方法と同様に、 Dialog を拡張する独自のクラスを作成する方がよい場合があります。

アクティビティの場合と同じように、カスタムダイアログクラスのonCreate()メソッド内でsetContentView()を呼び出すことにより、レイアウトXMLを設定できます。

過去にAlertDialogsをカスタマイズできる量に制限があり、必要なレベルのカスタマイズを取得するために独自のDialogクラスを実装しました。

8
Mark B