web-dev-qa-db-ja.com

Android(オーバーレイの色とダイアログウィンドウのレイアウトを変更する)で完全にカスタムのダイアログ/ポップアップを作成する方法

Androidのデフォルトのダイアログコンポーネントを完全に再スキンしたいと思います。具体的には私はこれをやりたい:

  • 半透明のオーバーレイの背景をデフォルトの黒から半透明の白に変更します。

  • デフォルトのウィンドウ枠の境界線を削除し、XMLで定義されたレイアウトに置き換えることで、ダイアログウィンドウを変更します(フローティングボタンのあるボーダーレスのグラフィックになります。実際のフレームはありません)。

ダイアログボックス内のカスタムレイアウトの作成に関するチュートリアルを見ました(例 http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-Android-application )、しかし、オーバーレイの色を変更したり、ポップアップするダイアログウィンドウを完全にカスタマイズしたり、「ウィンドウ」のないオーバーレイに変更したりすることについては何も見ていません。

39
justinl

この問題を解決し、次の手順を使用して、カスタム色の半透明オーバーレイ背景を持つ独自のカスタムポップアップオーバーレイを作成しました。

1-res/values /フォルダーに新しいxmlファイルを作成し、styles.xmlという名前を付けます

2-ダイアログプロパティを定義する場所です。これが私の外観です。画面上に表示されるデフォルトの半透明の黒いオーバーレイを置き換える場合は、windowIsFloatingをfalseに設定し、レイアウトの背景を任意の色に変更する必要があります。以下は、使用したファイルです。

_<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomDialogTheme" parent="@Android:style/Theme.Dialog">
        <item name="Android:windowBackground">@color/transparent_white</item>
        <item name="Android:windowIsFloating">false</item>
        <item name="Android:windowNoTitle">true</item>
    </style>
</resources>
_

3-Javaコードに戻り、ダイアログオブジェクトを作成するときは、コンテキストとテーマの両方を渡すコンストラクタを使用します。たとえば、myDialog = new Dialog(this, R.style.CustomDialogTheme);(CustomDialogThemeは名前属性です手順2のstyles.xmlで指定しました)

4-ダイアログオブジェクトのコンテンツビューを、ダイアログをどのように見せたいレイアウトに設定するだけです。例えば。 myDialog.setContentView(R.layout.my_custom_overlay);ダイアログを画面の中央に表示したい場合、そのルート要素の_Android:layout_gravity_をcenterに設定します

83
justinl

これはうまく機能しましたが、ダイアログを閉じる方法がありません。カスタムレイアウトにボタンを閉じて閉じる場合、リスナーを追加してダイアログウィンドウを閉じる方法は次のとおりです。

final Dialog d = new Dialog(this,R.style.CustomDialogTheme);
d.setContentView(R.layout.custom_dialog);
d.show();

Button close_btn = (Button) d.findViewById(R.id.close_btn);
close_btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        d.dismiss();
    }
});
20
pmko