Android与设计模式之Builder
来源:互联网 发布:大数据架构师要求 编辑:程序博客网 时间:2024/06/11 10:17
AlertDialog与PopupWindow
Android有两种对话框,AlertDialog和PopupWindow。两者的主要区别是AlertDialog是非阻塞的,当AlertDialog弹出时,后台程序依然可以继续运行;而PopupWinodw是阻塞的,当PopupWindow弹出时,后台程序会一直等待,直到PopupWindow消失才继续运行。
以Builder方式创建PopupWindow
当我们创建AlertDialog时,我们只需要new AlertDialog.Builder().set…设置自己想要的属性即可。这是因为AlertDialog中有一个内部类Builder,他将我们设置的属性都赋值给AlertController(AlertDialog的具体实现类)。同样,我们也可以把PopupWindow的具体实现封装起来。这里为了方便起见,我们可以设置的属性只有标题,内容,和监听。
类图
源码
/** * Created by burypen on 2016/8/21. * <p/> * 用法类似于AlertDialog的PopupWindow */public class CommonPopupWindow extends PopupWindow { public CommonPopupWindow(View contentView, int width, int height, boolean focusable) { super(contentView, width, height, focusable); } public static class Builder { private Context mContext; /* 标题 */ private CharSequence mTitle; /* 信息 */ private CharSequence mMsg; /* 点击确认按钮的监听 */ private PositiveButtonClickListener positiveButtonClickListener; /* 点击取消按钮的监听 */ private CancelButtonClickListener cancelButtonClickListener; private CommonPopupWindow popupWindow; public Builder(Context context) { this.mContext = context; } public Builder setTitle(CharSequence title) { if (title != null && !title.equals("")) { mTitle = title; } return this; } public Builder setMessage(CharSequence msg) { if (msg != null && !msg.equals("")) { mMsg = msg; } return this; } public Builder setOnPositiveButtonClickListener(PositiveButtonClickListener listener) { this.positiveButtonClickListener = listener; return this; } public Builder setOnCancelButtonClickListener(CancelButtonClickListener listener) { this.cancelButtonClickListener = listener; return this; } public CommonPopupWindow create() { View contentView = LayoutInflater.from(mContext).inflate(R.layout.common_popupwindow, null); TextView tvTitle = (TextView) contentView.findViewById(R.id.tv_title); TextView tvMessage = (TextView) contentView.findViewById(R.id.tv_message); Button btPositive = (Button) contentView.findViewById(R.id.bt_positive); Button btCancel = (Button) contentView.findViewById(R.id.bt_cancel); if (mTitle != null && !mTitle.equals("")) { tvTitle.setText(mTitle); tvTitle.setVisibility(View.VISIBLE); } else { tvTitle.setVisibility(View.GONE); } if (mMsg != null && !mMsg.equals("")) { tvMessage.setText(mMsg); tvMessage.setVisibility(View.VISIBLE); } else { tvMessage.setVisibility(View.GONE); } btPositive.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (positiveButtonClickListener != null) { positiveButtonClickListener.onClick(); } popupWindow.dismiss(); } }); btCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (cancelButtonClickListener != null) { cancelButtonClickListener.onClick(); } popupWindow.dismiss(); } }); popupWindow = new CommonPopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); popupWindow.setBackgroundDrawable(new BitmapDrawable()); return popupWindow; } public CommonPopupWindow show(View parent, int gravity, int x, int y) { CommonPopupWindow tmpPopupwindow = create(); tmpPopupwindow.showAtLocation(parent, gravity, x, y); return tmpPopupwindow; } } protected interface PositiveButtonClickListener { public void onClick(); } protected interface CancelButtonClickListener { public void onClick(); }}
使用方法
new CommonPopupWindow.Builder(MyActivity.this) .setTitle("提示") .setMessage("popupwindow创建成功") .setOnPositiveButtonClickListener(new CommonPopupWindow.PositiveButtonClickListener() { @Override public void onClick() { Toast.makeText(MyActivity.this, "您点击了确定", Toast.LENGTH_SHORT).show(); } }) .setOnCancelButtonClickListener(new CommonPopupWindow.CancelButtonClickListener() { @Override public void onClick() { Toast.makeText(MyActivity.this, "您点击了取消", Toast.LENGTH_SHORT).show(); } }) .show(parentView, Gravity.CENTER, 0, 0);
0 0
- Android与设计模式之Builder
- Android设计模式之Builder
- Android设计模式之Builder
- android设计模式之builder
- Android设计模式之Builder模式
- Android设计模式学习之Builder模式
- 《Android源码设计模式》之Builder模式
- Android 设计模式之Builder模式
- Android 设计模式学习之 Builder 模式
- Android设计模式之—Builder模式
- android 设计模式之builder(一)
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- C++学习笔记--多线程
- 机器学习算法比较
- 【Qt开发】事件循环与线程 二
- 中秋之夜 一个感人的flash动画小故事
- POJ2255----Tree Recovery
- Android与设计模式之Builder
- Cpp_Primer--函数
- uva 839 Not so Mobile 二叉树
- javaWeb中小问题,实体的DAO方法中定义实体对象问题
- MIT6.00 1x Lecture 2 - Core elements of programs 学习笔记
- JTAG的调试原理
- 推荐系统中所使用的混合技术介绍
- 给瀑布流加入模态对话框碰到的问题
- 跨越千年的RSA算法