web-dev-qa-db-ja.com

DialogまたはAlertDialogを拡張してダイアログをカスタマイズする

カスタムDialogを作りたいです。そのスタイルが気に入らないので、鋭い角ではなく角丸四角形にしたいと思います。テーマ別にAndroidManifest.xmlに実装する方法を知っています。たとえば、次のように使用します。

Android:theme="@style/Theme.CustomDialog"

そしてTheme.CustomDialog.xml

<style name="Theme.CustomDialog" parent="Android:style/Theme.Dialog">
        <item name="Android:windowBackground">@drawable/filled_box</item>
        <item name="Android:windowNoTitle">true</item>

filled_box.xml
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="#ffffffff"/>
    <stroke Android:width="3dp" color="#ffff8080"/>
    <corners Android:radius="30dp" />
    <padding Android:left="10dp" Android:top="10dp"
        Android:right="10dp" Android:bottom="10dp" />
</shape>

DialogまたはAlertDialogを拡張して、同様の結果を実装するにはどうすればよいですか?

19
pengwang

Dialog呼び出しsuper(context, R.style.CustomDialog);を拡張するクラスのコンストラクターで、特定のテーマでカスタムダイアログを作成するためにこれを何度も行いました。

ただし、変更するダイアログのテーマがテーマのみである場合は、ダイアログクラスのインスタンスをインスタンス化して、Dialog dialog = new Dialog(context, R.style.CustomDialog);のようなテーマIDを渡すだけで済みます。

Dialogの拡張の例:

public class MyDialog extends Dialog
{
    public MyDialog(final Context context)
    {
        // Set your theme here
        super(context, R.style.MyDialogTheme);

        // This is the layout XML file that describes your Dialog layout
        this.setContentView(R.layout.myDialogLayout);  
    }
}

このクラスに追加する残りのコードは、Activityクラスで作成するコードとほとんど同じです。

44
Mark B