16

このクラスのsetView()メソッドをAlertDialog使用すると、ダイアログ ボックスのカスタム ビューを指定できます。このカスタム ビューに含めることができるコントロールに制限はありますか?

また、カスタム ビューを設定した場合でもsetPositiveButton()setNegativeButton()、 などを使用してボタンを追加できますか?

4

4 に答える 4

39

AlertDialog クラスの setView() メソッドを使用すると、ダイアログ ボックスのカスタム ビューを指定できます。このカスタム ビューに含めることができるコントロールに制限はありますか?

AlertDialog.BuildersetView()メソッドは、 Viewから拡張された任意のクラスを取ります(そのサブクラスとそのサブクラスを参照してください)。

これは、EditTexts、Buttons などを意味します。また、viewGroups から拡張されたレイアウトも意味します。

また、カスタム ビューを設定した場合でも、setPositiveButton、setNegativeButton などを使用してボタンを追加できますか?

はい、それは体にのみ影響します。レイアウトの下にボタンが追加されます。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getLayoutInflater();
    // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the dialog
    // layout
    builder.setView(inflater.inflate(R.layout.YourLayout, null))
        .setPositiveButton(AlertDialog.BUTTON_NEGATIVE, "Yes!",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    //
                }
         })
        .setNegativeButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    LoginDialogFragment.this.getDialog().cancel();
                }
         });
    return builder.create();
}

アップデート:

この回答は、2 年前からいくつかの新しいアクティビティを取得しているようで、いくつかの変更が加えられています。

フォーマットを改善するためにコードを少し更新し、ベスト プラクティスの現状を考慮して、次のヒントを追加しました。

AlertDialog はダイアログのスタイルと構造を定義しますが、DialogFragment をダイアログのコンテナーとして使用する必要があります。DialogFragment クラスは、Dialog オブジェクトでメソッドを呼び出す代わりに、ダイアログを作成してその外観を管理するために必要なすべてのコントロールを提供します。

上記の例は、コールバック メソッドで を拡張DialogFragmentして作成する場合を意味します。AlertDialogonCreateDialog()

于 2013-02-12T14:28:02.927 に答える
3

提供されているドキュメントでAlertDialogは、AlertDialogのビュー内で設定できる内容に制限はありません。

したがって、カスタムビューは、ダイアログのタイトルの下で、まったく影響を受けないボタンの上に配置されます。

于 2013-02-12T14:29:19.150 に答える
2

私の知る限り、setView() には何でも追加できます。正/負のボタンは影響を受けません。

于 2013-02-12T14:26:00.480 に答える