首页 > 系统 > Android > 正文

Android自定义Dialog总结

2019-11-06 09:41:52
字体:
来源:转载
供稿:网友

     定义一个类然后去继承Dialog类,然后重写相应的构造器方法.大家都知道一般的对话框的创建过程都是来一个AlertDialog.Builder对象,然后使用一些set方法来设置标题内容以及设置一些自定义的view和点击的Button以及相应的点击事件并且可以采用链式编程一连串设置一些属性.运用到了设计模式中的建造者模式的方式来实现自定义控件的实现。

public class MapDialog extends Dialog{public MapDialog(Context context) {          super(context);      }        public MapDialog(Context context, int theme) {          super(context, theme);      }          public static class Builder {          PRivate Context context;          private String title;          private String message;          private String positiveButtonText;          private String negativeButtonText;          private View contentView;          private DialogInterface.OnClickListener positiveButtonClickListener;          private DialogInterface.OnClickListener negativeButtonClickListener;            public Builder(Context context) {              this.context = context;          }            public Builder setMessage(String message) {              this.message = message;              return this;          }            /**          * Set the Dialog message from resource          *           * @param title          * @return          */          public Builder setMessage(int message) {              this.message = (String) context.getText(message);              return this;          }            /**          * Set the Dialog title from resource          *           * @param title          * @return          */          public Builder setTitle(int title) {              this.title = (String) context.getText(title);              return this;          }            /**          * Set the Dialog title from String          *           * @param title          * @return          */            public Builder setTitle(String title) {              this.title = title;              return this;          }            public Builder setContentView(View v) {              this.contentView = v;              return this;          }            /**          * Set the positive button resource and it's listener          *           * @param positiveButtonText          * @return          */          public Builder setPositiveButton(int positiveButtonText,                  DialogInterface.OnClickListener listener) {              this.positiveButtonText = (String) context                      .getText(positiveButtonText);              this.positiveButtonClickListener = listener;              return this;          }            public Builder setPositiveButton(String positiveButtonText,                  DialogInterface.OnClickListener listener) {              this.positiveButtonText = positiveButtonText;              this.positiveButtonClickListener = listener;              return this;          }            public Builder setNegativeButton(int negativeButtonText,                  DialogInterface.OnClickListener listener) {              this.negativeButtonText = (String) context                      .getText(negativeButtonText);              this.negativeButtonClickListener = listener;              return this;          }            public Builder setNegativeButton(String negativeButtonText,                  DialogInterface.OnClickListener listener) {              this.negativeButtonText = negativeButtonText;              this.negativeButtonClickListener = listener;              return this;          }            public MapDialog create() {              LayoutInflater inflater = (LayoutInflater) context                      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);              // instantiate the dialog with the custom Theme              final MapDialog dialog = new MapDialog(context);              View layout = inflater.inflate(R.layout.dialog_normal_layout, null);              dialog.addContentView(layout, new LayoutParams(                      LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));              // set the dialog title              ((TextView) layout.findViewById(R.id.title)).setText(title);              // set the confirm button              if (positiveButtonText != null) {                  ((Button) layout.findViewById(R.id.positiveButton_ok))                          .setText(positiveButtonText);                  if (positiveButtonClickListener != null) {                      ((Button) layout.findViewById(R.id.negativeButton_cancel))                              .setOnClickListener(new View.OnClickListener() {                                  public void onClick(View v) {                                      positiveButtonClickListener.onClick(dialog,                                              DialogInterface.BUTTON_POSITIVE);                                  }                              });                  }              } else {                  // if no confirm button just set the visibility to GONE                  layout.findViewById(R.id.negativeButton_cancel).setVisibility(                          View.GONE);              }              // set the cancel button              if (negativeButtonText != null) {                  ((Button) layout.findViewById(R.id.negativeButton_cancel))                          .setText(negativeButtonText);                  if (negativeButtonClickListener != null) {                      ((Button) layout.findViewById(R.id.negativeButton_cancel))                              .setOnClickListener(new View.OnClickListener() {                                  public void onClick(View v) {                                      negativeButtonClickListener.onClick(dialog,                                              DialogInterface.BUTTON_NEGATIVE);                                  }                              });                  }              } else {                  // if no confirm button just set the visibility to GONE                  layout.findViewById(R.id.negativeButton_cancel).setVisibility(                          View.GONE);              }              // set the content message              if (message != null) {                  ((TextView) layout.findViewById(R.id.message)).setText(message);              } else if (contentView != null) {                  // if no message set                  // add the contentView to the dialog body                  ((LinearLayout) layout.findViewById(R.id.content))                          .removeAllViews();                  ((LinearLayout) layout.findViewById(R.id.content))                          .addView(contentView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));              }              dialog.setContentView(layout);              return dialog;          }      } }

关于使用上述控件如下所示:  

private void initDialogViews(){    MapDialog.Builder builder = new MapDialog.Builder(this);          builder.setMessage("这个就是自定义的提示框");          builder.setTitle("提示");          builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {              public void onClick(DialogInterface dialog, int which) {                  dialog.dismiss();                  //设置你的操作事项              }          });            builder.setNegativeButton("取消",                  new android.content.DialogInterface.OnClickListener() {                      public void onClick(DialogInterface dialog, int which) {                          dialog.dismiss();                      }                  });            builder.create().show();    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表