web-dev-qa-db-ja.com

android AlertDialog setView rules

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

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

15
Cygnus

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

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

これはEditText、ボタンなどを意味しますが、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();
}
_

UPDATE:

この回答は2年前から新しい活動があり、いくつかの点が変更されたようです。

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

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

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

31
Timmetje

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

そのため、カスタムビューはダイアログのタイトルの下とボタンの上に配置され、まったく影響を受けません。

3
ColdFire

私が知る限り、setView()に何でも追加できます。ポジティブ/ネガティブボタンは影響を受けません。

2

TRY、この例

  Android.support.v7.app.AlertDialog.Builder adb =
    new Android.support.v7.app.AlertDialog.Builder(YoreActivity.this);

  ViewGroup subView = (ViewGroup) getLayoutInflater().// inflater view
                      inflate(R.layout.yore_layout_alert, null, false);

  try {// set data of yore layout

     ((TextView) subView.findViewById(R.id.messageAlert))//get element TextView 
                                            .setText(SomeText);//set text

  } catch (NullPointerException npe) {
    npe.printStackTrace();
  }

  adb.setPositiveButton("textPOSITIVE", new DialogInterface.OnClickListener() {//one method go
    @Override
    public void onClick(DialogInterface dialog, int which) {
      //  TODO some code
    }
  });//one method end

  final Android.support.v7.app.AlertDialog alertDialog =
        adb.setTitle(SomeText)// set ttile 
        .setView( subView ).create();// add view in AlertDialog.Builder, and create AlertDialog

  try { //two method go

    ((Button) subView.findViewById(R.id.customPositivButton))
    .setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //  TODO some code
        alertDialog.dismiss();
      }
    });

  } catch (NullPointerException npe) {
    npe.printStackTrace();
  }  //two method end

  alertDialog.show(); //show in YoreActivity
0
amiron