DialogX优势
对话框是一个软件对用户操作进行响应、反馈的重要组件,而 DialogX 将可以协助开发者快速完成这些事务。
我们力求减少开发者所需要担心的,所需要顾虑的,而打造一款可以在任意时间,任意情况都能轻松使用的对话框组件。
在轻松使用的前提下,DialogX 提供了更多的个性接口方便开发者进行扩展,包括在对话框内插入自定义布局,亮暗色模式的切换,甚至自定义更符合 App UI 的自定义主题。
开源地址:https://github.com/kongzue/DialogX
✅DialogX的特性:
- DialogX 采用全新的实现方式,默认 View 实现方式更为轻便,亦可选 Window、DialogFragment 实现方式,自由灵活。
- DialogX 的启动与线程无关,你可以在任意线程启动 DialogX 而它都将自动在 UI 线程运行。
- DialogX 的启动无需 context 参数,默认提供静态方法一句代码实现对话框的启动,使用更加方便。 更自由,开发者可以轻松定制对话框中任何组件的样式,包括文本样式、按钮文字样式、菜单文本样式、输入文本样式,大到标题,小到提示消息都可以根据需要随意修改。
- DialogX 采用主题分离设计,默认自带 Material 主题,可选引入 IOS、Kongzue、MIUI 等其他风格主题,大大减小 App 体积,同时提供了主题接口,如有定制需求完全可以自行实现一套私有主题。
- 更低的耦合度,更少的问题,DialogX 可以在对话框正在运行的过程中随意关闭 Activity ,而无需担心以往 AlertDialog 等组件会引发的 WindowLeaked 错误。
- 更流畅的体验,DialogX 的动画效果更加丰富,对话框启动动画采用非线性动画实现,更自带连贯的等待提示到完成错误动画过渡效果,让你的 APP 更具动感。
- 所有主题默认支持亮暗色两种模式,只需一键配置即可实现亮暗色的对话框主题切换,更有自由的布局内容满足定制化需求,DialogX 也支持自动适应系统亮暗色模式切换,能够根据系统设置自动判断亮暗色显示效果的切换。
- 轻松的实现对话框的生命周期管控以及沉浸式适配。
引入
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' } //增加 jitPack Maven 仓库
}
}
1.gradle中加入
//https://github.com/kongzue/DialogX
def dialogx_version = "0.0.45"
implementation "com.github.kongzue.DialogX:DialogX:${dialogx_version}"
implementation "com.github.kongzue.DialogX:DialogXIOSStyle:${dialogx_version}"
implementation "com.github.kongzue.DialogX:DialogXKongzueStyle:${dialogx_version}"
implementation "com.github.kongzue.DialogX:DialogXMIUIStyle:${dialogx_version}"
2.Application中加入
DialogX.init(this)
DialogX.globalStyle = IOSStyle.style()
我举例一些常用用法
消息提示框(点击确定)
DialogX.globalStyle =IOSStyle.style();MessageDialog.show("标题","这里是正文内容。","确定").setOkButton(newOnDialogButtonClickListener<MessageDialog>(){@OverridepublicbooleanonClick(MessageDialog baseDialog,View v){PopTip.show("点击确定按钮");returnfalse;}});
选择对话框
DialogX.globalStyle =IOSStyle.style();MessageDialog messageDialog =newMessageDialog("多选对话框","移除App会将它从主屏幕移除并保留其所有数据。","删除App","取消","移至App资源库").setButtonOrientation(LinearLayout.VERTICAL);if(!rdoMiui.isChecked()){
messageDialog.setOkTextInfo(newTextInfo().setFontColor(Color.parseColor("#EB5545")).setBold(true));}
messageDialog.show();
输入框(文本输入)
DialogX.globalStyle =MaterialStyle.style();
btnInputDialog.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(View view){newInputDialog("标题","正文内容","确定","取消","正在输入的文字").setInputText("Hello World").setOkButton(newOnInputDialogButtonClickListener<InputDialog>(){@OverridepublicbooleanonClick(InputDialog baseDialog,View v,String inputStr){PopTip.show("输入的内容:"+ inputStr);returnfalse;}}).show();}});
弹提示窗(成功/失败)
//正确TipDialog.show(msg,WaitDialog.TYPE.SUCCESS)//错误TipDialog.show(msg,WaitDialog.TYPE.ERROR)
消息提示(Toast)
DialogX.globalStyle =MaterialStyle.style();PopTip.show("这是一个提示");PopTip.show(R.mipmap.img,"一个提示").setAutoTintIconInLightOrDarkMode(false).showLong();
菜单(多选一)
//view是指显示在哪个view上面DialogX.globalStyle =MaterialStyle.style();PopMenu.show(view,newString[]{"选项1","选项2","选项3"}).setOnMenuItemClickListener(newOnMenuItemClickListener<PopMenu>(){@OverridepublicbooleanonClick(PopMenu dialog,CharSequence text,int index){
btnSelectMenu.setText(text);returnfalse;}});//设置菜单并且给菜单设置图标DialogX.globalStyle =MaterialStyle.style();PopMenu.show(newString[]{"添加","编辑","删除","分享"}).setOnMenuItemClickListener(newOnMenuItemClickListener<PopMenu>(){@OverridepublicbooleanonClick(PopMenu dialog,CharSequence text,int index){if(index==0){
dialog.setMenuList(newString[]{"A","B","C"});returntrue;}returnfalse;}}).setOnIconChangeCallBack(newOnIconChangeCallBack<PopMenu>(true){@OverridepublicintgetIcon(PopMenu dialog,int index,String menuText){switch(menuText){case"添加":returnR.mipmap.img_dialogx_demo_add;case"编辑":returnR.mipmap.img_dialogx_demo_edit;case"删除":returnR.mipmap.img_dialogx_demo_delete;case"分享":returnR.mipmap.img_dialogx_demo_share;default:return0;}}});
底部自定义滑动布局
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_root"android:layout_width="match_parent"android:layout_height="500dp"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_margin="5dp"android:text="我是余静"android:textColor="@color/black"android:textSize="16sp"/><com.kongzue.dialogxdemo.custom.recycleview.CustomRecycleViewandroid:id="@+id/recycleView"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:tag="ScrollController"></com.kongzue.dialogxdemo.custom.recycleview.CustomRecycleView></LinearLayout>
List<CustomRecycleViewAdapter.Data> list =newArrayList<>();
list.add(newCustomRecycleViewAdapter.Data("Item Text 1"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 2"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 3"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 4"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 5"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 6"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 7"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 8"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 9"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 10"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 11"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 12"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 13"));
list.add(newCustomRecycleViewAdapter.Data("Item Text 14"));DialogX.globalStyle =MaterialStyle.style();BottomDialog.build().setCustomView(newOnBindView<BottomDialog>(R.layout.layout_custom_recycleview){@OverridepublicvoidonBind(BottomDialog dialog,View v){RecyclerView recyclerView =(RecyclerView) v.findViewById(R.id.recycleView);LinearLayoutManager layoutManager =newLinearLayoutManager(me);
recyclerView.setLayoutManager(layoutManager);CustomRecycleViewAdapter adapter =newCustomRecycleViewAdapter(list);
recyclerView.setAdapter(adapter);}}).show();
自定义对话框
CustomDialog.show(newOnBindView<CustomDialog>(R.layout.layout_custom_dialog){@OverridepublicvoidonBind(finalCustomDialog dialog,View v){ImageView btnOk = v.findViewById(R.id.btn_ok);
btnOk.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(View v){
dialog.dismiss();}});}}).setMaskColor(getResources().getColor(R.color.black30));
对话框显示在按钮上
CustomDialog.show(newOnBindView<CustomDialog>(R.layout.layout_custom_dialog_align){privateTextView btnSelectPositive;@OverridepublicvoidonBind(finalCustomDialog dialog,View v){
btnSelectPositive = v.findViewById(R.id.btn_selectPositive);
btnSelectPositive.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(View v){PopTip.show("我知道了");
dialog.dismiss();}});}}).setCancelable(false).setMaskColor(getResources().getColor(R.color.black30)).setEnterAnimResId(R.anim.anim_custom_pop_enter).setExitAnimResId(R.anim.anim_custom_pop_exit).setAlignBaseViewGravity(view,Gravity.TOP)//显示在view上.setBaseViewMarginBottom(-dip2px(45)).show();
还有更多功能大家自己试验吧。
开源地址:https://github.com/kongzue/DialogX
我的Github:github.com/yutils
我的CSDN:https://blog.csdn.net/Yu1441
感谢关注微博:细雨若静
我的QQ:3373217 (可技术交流)
版权归原作者 雨季余静 所有, 如有侵权,请联系我们删除。