温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中如何实现仿IOS提示框

发布时间:2021-06-28 13:49:53 来源:亿速云 阅读:216 作者:小新 栏目:移动开发

这篇文章主要介绍Android中如何实现仿IOS提示框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

自定义Dialog

我们知道Android中最常用的对话框就是Dialog及其派生类。这次我们通过组合的方式来实现一个类似IOS对话框的效果。我们先来看一下布局效果,这个相信大家都能弄出来,在这里我就贴一下最后的效果图(注意:对话框的边缘是圆角的)。

效果图如下:

Android中如何实现仿IOS提示框

我们看到,这个和IOS的对话框已经非常相似了,后面我们需要做的就是将其作为一个组件封装起来,实现AlertDialog那样的调用方式提供给调用者使用。下面我们来看一下整个的封装过程。

1、组合使用Dialog进行对象的构建

/**
  * 创建BaseDialog实例
  * @return
  */
 public BaseDialog builder(){
  LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  mDialog = new Dialog(mContext, R.style.Dialog);
  //设置dialog弹出后会点击屏幕,dialog不消失;点击物理返回键dialog消失
  mDialog.setCanceledOnTouchOutside(false);
  View layout = inflater.inflate(R.layout.dialog_normal_layout, null);
  mDialog.addContentView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT));
  //设置Dialog中展示的msg
  mMessage=(TextView) layout.findViewById(R.id.txtMsg);
  //设置确认按钮的处理事件
  mPositiveBtnText=(TextView) layout.findViewById(R.id.txtSubmit);
  mPositiveBtnText.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    if (mPositiveBtnClickListener != null) {
     mPositiveBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_POSITIVE);
    }
   }
  });
  mNegativeBtnText=(TextView) layout.findViewById(R.id.txtCancle);
  mNegativeBtnText.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    if(mNegativeBtnClickListener!=null) {
     mNegativeBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_NEGATIVE);
    }
   }
  });
  mDialog.setContentView(layout);
  return this;
 }

在这段代码中,我们看到第7行代码生成一个Dialog对象,然后通过解析样式文件(XML)通过setContentView方法添加到生成的Dialog对象中。下面的代码我们看到通过解析XML样式文件,来设置Dialog显示的文本、取消、确认按钮触发的事件等操作。重点在最后一行代码return this而不是mDialog。因为通过返回this对象我们可以使用“链式调用”来不断的进行调用设置等操作,类似Android中的AlertDialog使用方式。

2、自定义Dialog的一些设置

/**
  * 设置Msg
  * 支持Resource设置
  * @param message
  */
 public BaseDialog setMessage(int message){
  mMessage.setText(mContext.getText(message).toString());
  return this;
 }
 /**
  * 设置Msg
  * @param message
  */
 public BaseDialog setMessage(String message){
  mMessage.setText(message);
  return this;
 }

 public BaseDialog setPositiveButton(int positiveBtnText,DialogInterface.OnClickListener listener) {
  mPositiveBtnText.setText(mContext.getText(positiveBtnText));
  mPositiveBtnClickListener = listener;
  return this;
 }
 public BaseDialog setPositiveButton(String positiveBtnText,DialogInterface.OnClickListener listener){
  mPositiveBtnText.setText(positiveBtnText);
  mPositiveBtnClickListener=listener;
  return this;
 }

 public BaseDialog setNegativeButton(int negativeBtnText,DialogInterface.OnClickListener listener){
  mNegativeBtnText.setText(mContext.getText(negativeBtnText));
  mNegativeBtnClickListener=listener;
  return this;
 }

 public BaseDialog setNegativeButton(String negativeBtnText,DialogInterface.OnClickListener listener){
  mNegativeBtnText.setText(negativeBtnText);
  mNegativeBtnClickListener=listener;
  return this;
 }

 public void show(){
  mDialog.show();
 }

我们看到我们提供了几个比较常用的函数。特别是setPositiveButton等方法,我们直接将事件处理对象传递进来了。下面我们来看下自定义控件的字段定义。代码如下:

public BaseDialog(Context context){
  mContext=context;
 }
 private Dialog mDialog;
 protected Context mContext;
 protected TextView mMessage;
 protected TextView mPositiveBtnText;
 protected TextView mNegativeBtnText;
 protected DialogInterface.OnClickListener mPositiveBtnClickListener;
 protected DialogInterface.OnClickListener mNegativeBtnClickListener;

我们看到整个自定义Dialog的核心就是mDialog对象,通过组合的方式我们在每一个BaseDialog对象内部都会有一个Dialog对象,BaseDailog对象只是提供了一些外围的显示功能。核心的例如隐藏、显示、弹出效果等方式依赖于嵌入的mDialog对象的。

下面我们来看一下自定义Dialog的调用方式。代码如下:

/**
 * 弹出电话确认按钮
 */
new BaseDialog(getActivity())
  .builder()
  .setMessage("15895991339")
  .setPositiveButton("确认", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:15895991339"));
    startActivity(intent);
    dialog.dismiss();
   }
  }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
   }
  }).show();

以上是“Android中如何实现仿IOS提示框”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI