SuperDialog
一个类文件不到600行纯代码实现多功能Dialog,list、image、input输入框、Progress自定义View和可变参数button数量
欢迎star:https://github.com/hnsugar/SuperDialog
Github:https://github.com/hnsugar/
QQ:1264957104
为什么写纯代码Dialog?
我比较追求少而精,同时不想引入太多东西,添加容易,删除是很让人郁闷的,例如
源码导入别人的库到自己项目,我们还要对应放入各种资源文件,久而久之
是不是文件超多,甚至都不知道是干什么的,想清理都难,如果只有一个类就可以了,
那管理起来是不是就方便了许多呢,最重要的是,不用XML定义是很考技术的😁。
本人对大量引入第三方库比较反感,会造成APP体积增大,同时存在兼容性隐患,所以我开发的
项目原则是降低给别人造成麻烦,例如https://github.com/hnsugar/android-debugdata-webtool,
这个库是我为测试和开发写的,直接依赖就可使用,可以查看运行时APP内的数据库和共享参数及
data目录文件管理,就这样一个库同时具备web服务器和数据接口功能,其中数据使用Json格式。
但是,除了java和Android基本类是没有引用到第三方Json库的,不过确实用了第三方库,
那就不得不提我另一个库https://github.com/hnsugar/IntelligentTool,自动查找第三方库并使用。
这样我就解决了给使用者带来更多不同版本库的烦恼。
正题
如下全功能展示例子代码就构建了一个全功能的Dialog,如下图,需要注意的是,默认设置列表后就不会显示底部按钮,如果有特殊需要,只需要调整链式调用顺序即可。
还有需要注意的是获取ImageView前必须先show,show操作中增加了初始化操作,不然直接get是null。buttonText设置了有奇效,很多地方都可以混用,但是我希望
开发者按套路出牌,设置成正常的Dialog:-D。
- 下方按钮是代码设置drawable,根据位置设置圆角位置
- 相应类型方法不调用默认规则是不显示对应类型组件。
- 部分方法会强制相应方法设置值,但是调整调用顺序可以重新覆盖为最新设置。
(栗子:显示列表时屏蔽下方按钮显示,但是先调用setDialogMenuItemList()后设置不显示下方按钮,如果后面调用setButtonTexts()则会把下方按钮显示出来,出现参数重置) - 自定义View可以实现更多功能。
- 单个文件移植简单,需要定义什么字体颜色什么的自行更改,没必要提供过多的方法。
举个栗子:
全功能展示(链式调用顺序影响具体显示和功能效果)
public void test1(View view) {
final SuperDialog superDialog = new SuperDialog(this);
ArrayList<SuperDialog.DialogMenuItem> menuItems = new ArrayList<>();
menuItems.add(new SuperDialog.DialogMenuItem("收藏", R.mipmap.ic_winstyle_favor));
menuItems.add(new SuperDialog.DialogMenuItem("下载", R.mipmap.ic_winstyle_download));
menuItems.add(new SuperDialog.DialogMenuItem("分享", R.mipmap.ic_winstyle_share));
menuItems.add(new SuperDialog.DialogMenuItem("删除", R.mipmap.ic_winstyle_delete));
menuItems.add(new SuperDialog.DialogMenuItem("歌手", R.mipmap.ic_winstyle_artist));
menuItems.add(new SuperDialog.DialogMenuItem("专辑", R.mipmap.ic_winstyle_album));
superDialog.setTitle("全功能展示Dialog").setContent("纯代码编写,没有使用XML.")
.setListener(listener).setShowImage().setDialogMenuItemList(menuItems).setButtonTexts(new String[]{"按钮1", "按钮2", "按钮3", "按钮4"}).setImageListener(new SuperDialog.onDialogImageListener() {
@Override
public void onInitImageView(ImageView imageView) {
Glide.with(imageView).load("https://www.baidu.com/img/fnj_96d95207b4a706738f1b8be3b41ea9f3.gif").into(imageView);
}
}).setCustomViewListener(new SuperDialog.onDialogCustomViewListener() {
@Override
public View onInitCustomView(LinearLayout viewGroup) {
return new ProgressBar(viewGroup.getContext());
}
}).setInputListener(new SuperDialog.onDialogInputListener() {
@Override
public void onInitEditText(EditText inputView) {
inputView.setHint("自定义设置");
}
@Override
public void onComplete(int buttonIndex, String text) {
Toast.makeText(getApplicationContext(), "输入框:" + text, Toast.LENGTH_SHORT).show();
}
}).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
0.png
普通Dialog
public void test2(View view) {
SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("提示框类型Dialog").setContent("纯代码编写,没有使用XML").setListener(listener).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
!
1.png
无标题Dialog
public void test3(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setContent("纯代码编写,没有使用XML\r\n没有标题").setListener(listener).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
2.png
两个按钮
public void test4(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("2个button").setContent("纯代码编写,没有使用XML").setListener(listener).setButtonTexts(new String[]{"按钮1", "按钮2"}).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
3.png
三个按钮
public void test5(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("3个button").setContent("纯代码编写,没有使用XML").setListener(listener).setButtonTexts(new String[]{"按钮1", "按钮2", "按钮3"}).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
4.png
可变参数设置多个按钮
public void test6(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("可变参数N个button").setContent("纯代码编写,没有使用XML\r\n.setButtonTexts(\"按钮1\", \"按钮2\", \"按钮3\", \"按钮4\", \"按钮5\", \"按钮6\")").setListener(listener).setButtonTexts("按钮1", "按钮2", "按钮3", "按钮4", "按钮5", "按钮6").show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
5.png
带图片文字
布局addView后回调onInitImageView(),返回ImageView可以自己处理事件和效果
public void test7(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("带图片Dialog").setContent("纯代码编写,没有使用XML").setListener(listener).setShowImage().setImageListener(new SuperDialog.onDialogImageListener() {
@Override
public void onInitImageView(ImageView imageView) {
Glide.with(imageView).load("https://www.baidu.com/img/fnj_96d95207b4a706738f1b8be3b41ea9f3.gif").into(imageView);
}
}).setButtonTexts(new String[]{"按钮1", "按钮2", "按钮3", "按钮4"}).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
6.png
列表
public void test8(View view) {
final SuperDialog superDialog = new SuperDialog(this);
ArrayList<SuperDialog.DialogMenuItem> menuItems = new ArrayList<>();
menuItems.add(new SuperDialog.DialogMenuItem("收藏", R.mipmap.ic_winstyle_favor));
menuItems.add(new SuperDialog.DialogMenuItem("下载", R.mipmap.ic_winstyle_download));
menuItems.add(new SuperDialog.DialogMenuItem("分享", R.mipmap.ic_winstyle_share));
menuItems.add(new SuperDialog.DialogMenuItem("删除", R.mipmap.ic_winstyle_delete));
menuItems.add(new SuperDialog.DialogMenuItem("歌手", R.mipmap.ic_winstyle_artist));
menuItems.add(new SuperDialog.DialogMenuItem("专辑", R.mipmap.ic_winstyle_album));
superDialog.setTitle("列表的Dialog").setContent("纯代码编写,没有使用XML").setListener(listener).setDialogMenuItemList(menuItems).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
7.png
单按钮默认样式输入Dialog
布局addView前回调onInitEditText(),返回edittext可以设置事件及效果。
未设置setButtonTexts()则进入判断,如果是输入模式且文本数组为空,则默认文本数组为{"确定"}
public void test9(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("输入框Dialog").setContent("纯代码编写,没有使用XML").setInputListener(new SuperDialog.onDialogInputListener() {
@Override
public void onInitEditText(EditText inputView) {
inputView.setHint("请输入文字");
}
@Override
public void onComplete(int buttonIndex, String text) {
Toast.makeText(getApplicationContext(), "输入框:" + text, Toast.LENGTH_SHORT).show();
}
}).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
8.png
自定义多按钮输入Dialog
按钮受setButtonTexts()影响,设置数据会按顺序显示,onComplete()回调会返回文本和点击按钮位置,顺序与设置一致。
public void test10(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("输入框Dialog").setContent("纯代码编写,没有使用XML").setButtonTexts("取消", "更改").setInputListener(new SuperDialog.onDialogInputListener() {
@Override
public void onInitEditText(EditText inputView) {
inputView.setHint("请输入文字");
}
@Override
public void onComplete(int buttonIndex, String text) {
if (buttonIndex == 0) {
Toast.makeText(getApplicationContext(), "取消输入框:" + text, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "输入框:" + text, Toast.LENGTH_SHORT).show();
}
}
}).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
9.png
等待/进度自定义ViewDialog
public void test11(View view) {
final SuperDialog superDialog = new SuperDialog(this);
superDialog.setTitle("进度/等待,自定义View Dialog").setContent("处理进度55%").setShowButtonLayout(false).setCustomViewListener(new SuperDialog.onDialogCustomViewListener() {
@Override
public View onInitCustomView(LinearLayout viewGroup) {
return new ProgressBar(viewGroup.getContext());
}
}).show();
superDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
});
}
10.png
网友评论