博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中仿IOS提示框的实现
阅读量:6430 次
发布时间:2019-06-23

本文共 5143 字,大约阅读时间需要 17 分钟。

前言

  在Android开发中,我们有时需要实现类似IOS的对话框。今天我就来总结下,如何通过自定义的开发来实现类似的功能。

自定义Dialog

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

  效果图如下:

  

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

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

  我们来看一下核心代码:

1 /** 2      * 创建BaseDialog实例 3      * @return 4      */ 5     public BaseDialog builder(){ 6         LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 7         mDialog = new Dialog(mContext, R.style.Dialog); 8         //设置dialog弹出后会点击屏幕,dialog不消失;点击物理返回键dialog消失 9         mDialog.setCanceledOnTouchOutside(false);10         View layout = inflater.inflate(R.layout.dialog_normal_layout, null);11         mDialog.addContentView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,                                   ViewGroup.LayoutParams.WRAP_CONTENT));12         //设置Dialog中展示的msg13         mMessage=(TextView) layout.findViewById(R.id.txtMsg);14         //设置确认按钮的处理事件15         mPositiveBtnText=(TextView) layout.findViewById(R.id.txtSubmit);16         mPositiveBtnText.setOnClickListener(new View.OnClickListener() {17             @Override18             public void onClick(View v) {19                 if (mPositiveBtnClickListener != null) {20                     mPositiveBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_POSITIVE);21                 }22             }23         });24 25         mNegativeBtnText=(TextView) layout.findViewById(R.id.txtCancle);26         mNegativeBtnText.setOnClickListener(new View.OnClickListener() {27             @Override28             public void onClick(View v) {29                 if(mNegativeBtnClickListener!=null) {30                     mNegativeBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_NEGATIVE);31                 }32             }33         });34         mDialog.setContentView(layout);35 36         return this;37     }

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

2、自定义Dialog的一些设置

  

1 /** 2      * 设置Msg 3      * 支持Resource设置 4      * @param message 5      */ 6     public BaseDialog setMessage(int message){ 7         mMessage.setText(mContext.getText(message).toString()); 8         return this; 9     }10 11     /**12      * 设置Msg13      * @param message14      */15     public BaseDialog setMessage(String message){16         mMessage.setText(message);17         return this;18     }19 20 21     public BaseDialog setPositiveButton(int positiveBtnText,DialogInterface.OnClickListener listener) {22         mPositiveBtnText.setText(mContext.getText(positiveBtnText));23         mPositiveBtnClickListener = listener;24         return this;25     }26 27     public BaseDialog setPositiveButton(String positiveBtnText,DialogInterface.OnClickListener listener){28         mPositiveBtnText.setText(positiveBtnText);29         mPositiveBtnClickListener=listener;30         return this;31     }32 33 34     public BaseDialog setNegativeButton(int negativeBtnText,DialogInterface.OnClickListener listener){35         mNegativeBtnText.setText(mContext.getText(negativeBtnText));36         mNegativeBtnClickListener=listener;37         return this;38     }39 40 41     public BaseDialog setNegativeButton(String negativeBtnText,DialogInterface.OnClickListener listener){42         mNegativeBtnText.setText(negativeBtnText);43         mNegativeBtnClickListener=listener;44         return this;45     }46 47 48     public void show(){49         mDialog.show();50     }

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

1 public BaseDialog(Context context){ 2         mContext=context; 3     } 4  5     private Dialog mDialog; 6     protected Context mContext; 7     protected TextView mMessage; 8     protected TextView mPositiveBtnText; 9     protected TextView mNegativeBtnText;10     protected DialogInterface.OnClickListener mPositiveBtnClickListener;11     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();

  我们看到,调用方式和AlertDialog的使用方式很相似。

 

转载于:https://www.cnblogs.com/dreamGong/p/5882348.html

你可能感兴趣的文章
我的友情链接
查看>>
java学习第一天1.2
查看>>
清空输入缓冲区的方法
查看>>
Yii2 项目优化小贴士
查看>>
UIScrollView的判断位置的属性如下:
查看>>
部署mimic版本的Ceph分布式存储系统
查看>>
Java缓冲流细节
查看>>
IOS中复制对象的用法及深拷贝和浅拷贝详解
查看>>
lfs
查看>>
Eclipse内存不够解决办法
查看>>
关于tbody js取法兼容。
查看>>
[CC]点云密度计算
查看>>
CATransition 动画处理视图切换
查看>>
[转载] 高等应用数学问题的matlab求解——第3章 微积分问题的计算机求解
查看>>
大整数比较大小
查看>>
C++ 指定路径文件夹存在与否查询及文件夹创建
查看>>
八大排序算法的Java实现
查看>>
IDEA+Maven+Tomcat构建项目流程
查看>>
数据是重要的战略资源,数据同样是产品非常重要的组成部分。淘宝对中国最大的贡献,不只是方便了老百姓购物,而是把中国消费者的消费习惯数据慢慢沉淀下来。...
查看>>
Leetcode Find Minimum in Rotated Sorted Array
查看>>