android AlertDialog setView规则

时间:2013-02-12 14:21:23

标签: android android-alertdialog android-custom-view

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

另外,如果我们设置自定义视图,我们仍然可以使用setPositiveButton()setNegativeButton()等添加按钮吗?

4 个答案:

答案 0 :(得分:29)

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并在onCreateDialog()回调方法中创建AlertDialog。

答案 1 :(得分:3)

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

因此,自定义视图将取代对话框标题下方和按钮上方,而这些按钮根本不受影响。

答案 2 :(得分:2)

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

答案 3 :(得分: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