16

该类的setView()方法AlertDialog允许为对话框指定自定义视图。此自定义视图中可以包含哪些控件是否有任何限制?

另外,如果我们设置一个自定义视图,我们还可以使用 , 等添加按钮setPositiveButton()setNegativeButton()

4

4 回答 4

39

AlertDialog 类的 setView() 方法允许为对话框指定自定义视图。此自定义视图中可以包含哪些控件是否有任何限制?

AlertDialog.Builder中的setView()方法采用从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和创建 a时。AlertDialogonCreateDialog()

于 2013-02-12T14:28:02.927 回答
3

在提供的文档中,AlertDialog对于您可以在 AlertDialog 的视图中设置的内容没有任何限制。

因此自定义视图将占据对话框标题下方和按钮上方的位置,这些按钮根本不会受到影响。

于 2013-02-12T14:29:19.150 回答
2

据我所知,你可以在 setView() 中添加任何你想要的东西。正/负按钮不会受到影响。

于 2013-02-12T14:26:00.480 回答
0

试试这个例子

  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
于 2017-12-20T10:27:31.620 回答