封装一个独立弹窗Module,这里的弹窗包括普通的Dialog方式弹框和WindowManager方式弹窗。提供一种管理项目里面弹窗的方案,便于后期修改和维护。首先描述一个在大项目中普遍存在的一个现象:
由于项目的功能多,负责功能的人不同,当功能中需要一个普通的确定取消对话框时,大部分人都选择自己写了一个,自己new一个独立的弹窗出来。这样做的好处有以下几个:
- 代码逻辑独立,自己写的代码自己能控制
- 快速方便,便于修改,便于满足各种奇怪的需求
可是这个做法导致项目中存在大量的代码冗余,大量的分散的弹窗,短期内一般也不会有什么问题,如果这个时候项目要重构,要修改所有弹窗的样式,接下来面临几个问题:
- 不知道有多少个弹窗
- 不知道代码中什么地方会有弹窗
- 不知道弹窗写法都有哪些(样式不知道,弹出的方式是Dialog还是WindowManager)
- 改动点多,工作量大,风险大
项目重构就要把所有弹窗重新管理起来,方便维护和拓展,具体设计与实现细节见博客,下面是弹窗的样式:
在自己的项目中导入CommonAlertPop Module,参考本案例中的使用方法即可,如下:
Dialog弹窗Type定义
Dialog弹窗使用
final ICommonDialog dialog = CommonDialogFactory.createDialogByType(this, DialogUtil.DIALOG_TYPE_1);
dialog.setTitleText("DIALOG_TYPE_1");
dialog.setCancelBtn(R.string.cancel, new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
dialog.setOkBtn(R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.setCanceledOnTouchOutside(true);
dialog.show();
WindowManager弹窗Type定义
WindowManager弹窗使用
final ICommonWindowPop windowPop = CommonWindowPopFactory.createWindowPopByType(this, WindowPopUtil.WINDOW_POP_TYPE_2);
windowPop.setTitleBgType(WindowPopUtil.TITLE_SAFE_BLUE);
windowPop.setTitleText("WINDOW_POP_TYPE_2");
windowPop.setContentView(R.layout.dialog_custom_content_test_layout);
windowPop.setCanceledOnTouchOutside(true);
windowPop.setCancelBtn(R.string.cancel, new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
windowPop.setOkBtn(R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View v) {
windowPop.dismiss();
}
});
windowPop.show();
具体实现细节参考博文地址:Android重构与设计之路,从整理提示对话框弹窗开始
本项目只是提供一种基本的框架,具体的对话框样式可以根据自身项目的需求而改变,可以随意添加删除修改一种类型,主要是为了统一管理项目中的弹窗,方便维护与管理。