dialog第三方框架,material-dialogs的使用
之前浏览github的时候发现一个比较好用的MD风格的Dialog。这里记录一下使用。
Github地址:https://github.com/afollestad/material-dialogs
导入
compile 'com.afollestad.material-dialogs:core:0.9.1.0'
compile 'com.afollestad.material-dialogs:commons:0.9.1.0'
- 1
- 2
具体的使用
- Basic Dialog
简单的dialog
new MaterialDialog.Builder(MainActivity.this).title("basic dialog").content("一个简单的dialog,高度会随着内容改变,同时还可以嵌套RecyleView").iconRes(R.drawable.icon).positiveText("同意").negativeText("不同意").neutralText("更多信息").widgetColor(Color.BLUE)//不再提醒的checkbox 颜色//CheckBox.checkBoxPrompt("不再提醒", false, new CompoundButton.OnCheckedChangeListener(){@Overridepublic void onCheckedChanged(CompoundButton compoundButton, boolean b) {if (b) {Toast.makeText(MainActivity.this, "不再提醒", Toast.LENGTH_LONG).show();} else {Toast.makeText(MainActivity.this, "会再次提醒", Toast.LENGTH_LONG).show();}}})//嵌套recycleview,这个的点击事件可以先获取此Recycleview对象然后自己处理.adapter(new RecycleviewAdapter(getData(), MainActivity.this), new LinearLayoutManager(MainActivity.this)).itemsCallback(new MaterialDialog.ListCallback() {@Overridepublic void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {dataChoose = "下标:" + position + " and 数据:" + mData.get(position);}})//点击事件添加 方式1.onAny(new MaterialDialog.SingleButtonCallback() {@Overridepublic void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {if (which == DialogAction.NEUTRAL) {Toast.makeText(MainActivity.this, "更多信息", Toast.LENGTH_LONG).show();} else if (which == DialogAction.POSITIVE) {Toast.makeText(MainActivity.this, "同意" + dataChoose, Toast.LENGTH_LONG).show();} else if (which == DialogAction.NEGATIVE) {Toast.makeText(MainActivity.this, "不同意", Toast.LENGTH_LONG).show();}}}).show();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
相应的效果:
简单的diaolog,同意和不同意的字体颜色是默认是R.color.colorAccent
文本变多的时候会自动拉长高度
嵌套一个recycleview,这个的点击事件可以先获取此Recycleview对象然后自己处理
.adapter(new RecycleviewAdapter(getData(), MainActivity.this), new LinearLayoutManager(MainActivity.this))//
RecycleView rc= dialog.getRecyclerView();
- 1
- 2
- 3
- 4
这里添加一个更多信息的按钮
.neutralText("更多信息")
- 1
点击事件
- 方式一
.onAny(new MaterialDialog.SingleButtonCallback() {@Overridepublic void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {if (which == DialogAction.NEUTRAL) {Toast.makeText(MainActivity.this, "更多信息", Toast.LENGTH_LONG).show();} else if (which == DialogAction.POSITIVE) {Toast.makeText(MainActivity.this, "同意" + dataChoose, Toast.LENGTH_LONG).show();} else if (which == DialogAction.NEGATIVE) {Toast.makeText(MainActivity.this, "不同意", Toast.LENGTH_LONG).show();}}})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
public Builder onAny(@NonNull SingleButtonCallback callback) {this.onAnyCallback = callback;return this;}public interface SingleButtonCallback {void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which);}public enum DialogAction {POSITIVE,NEUTRAL,NEGATIVE
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
就是传一个SingleButtonCallback 接口,用DialogAction 来区分现在是那个Action 请求,然后对应的处理
- 方式二
.onPositive(new MaterialDialog.SingleButtonCallback() {@Overridepublic void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {Toast.makeText(MainActivity.this,"同意",Toast.LENGTH_LONG).show();}})
//.onNegative()
//.onNeutral()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
单个按钮添加监听和onAny 其实一样
- 方式三
这个方法已经过时了
.callback(new MaterialDialog.ButtonCallback() {//添加按钮点击监听@Overridepublic void onPositive(MaterialDialog dialog) {super.onPositive(dialog);Toast.makeText(MainActivity.this,"同意",Toast.LENGTH_LONG).show();}@Overridepublic void onNegative(MaterialDialog dialog) {super.onNegative(dialog);Toast.makeText(MainActivity.this,"不同意",Toast.LENGTH_LONG).show();}@Overridepublic void onNeutral(MaterialDialog dialog) {super.onNeutral(dialog);Toast.makeText(MainActivity.this,"更多信息",Toast.LENGTH_LONG).show();}})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
添加checkbox
.checkBoxPrompt("不再提醒", false, new CompoundButton.OnCheckedChangeListener() {//check事件@Overridepublic void onCheckedChanged(CompoundButton compoundButton, boolean b) {if (b) {Toast.makeText(MainActivity.this, "不再提醒", Toast.LENGTH_LONG).show();} else {Toast.makeText(MainActivity.this, "会再次提醒", Toast.LENGTH_LONG).show();}}})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 颜色修改
.widgetColor(Color.BLUE)
- 1
其他属性介绍
.btnSelector(R.color.colorPrimary)//按钮的背景颜色//分开设置2个按钮的背景颜色
// .btnSelector(R.color.colorPrimary, DialogAction.NEGATIVE)
// .btnSelector(R.color.colorPrimaryDark, DialogAction.POSITIVE)
// .btnSelector(R.color.colorPrimary,DialogAction.NEUTRAL)
// .backgroundColor(Color.parseColor("#FF9988"))//dialog的背景颜色
// .contentColor(Color.WHITE)//内容字体的颜色
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- List Dialogs
列表弹框,.item ()来添加类别内容,也可以是
.items(new String[]{"AAAA","BBBBB","CCCCC","DDDDDDDD","EEEEE","FFFFFF","GGGGGG","HHHHHHH"})
- 1
new MaterialDialog.Builder(MainActivity.this).title("List Dialog").iconRes(R.drawable.ic_logo).content("List Dialog,显示数组信息,高度会随着内容扩大") .items(R.array.item)//.listSelector(R.color.green)//列表的背景颜色.autoDismiss(false)//不自动消失.show();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 列表点击事件
.itemsCallback(new MaterialDialog.ListCallback() {//选中监听,同时dialog消失@Overridepublic void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {dataChoose += "下标:" + position + " and 数据:" + text;Toast.makeText(MainActivity.this, dataChoose, Toast.LENGTH_LONG).show();}})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 添加单选
//单选.itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() {//0 表示第一个选中 -1 不选@Overridepublic boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {dataChoose="此时选中的下标"+which;Toast.makeText(MainActivity.this,dataChoose,Toast.LENGTH_LONG).show();return true;}})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- Multi Choice List Dialogs
多选dialog
new MaterialDialog.Builder(MainActivity.this).title("Multi Choice List Dialogs").iconRes(R.drawable.ic_logo).content("Multi Choice List Dialogs,显示数组信息,高度会随着内容扩大.可以多选").items(R.array.item).positiveText("确定").widgetColor(Color.RED)//改变checkbox的颜色//多选框添加.itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() {@Overridepublic boolean onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) {return true;//false 的时候没有选中样式}})//点击确定后获取选中的下标数组.onPositive(new MaterialDialog.SingleButtonCallback() {@Overridepublic void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {dialog.dismiss();Toast.makeText(MainActivity.this, "选中" + dialog.getSelectedIndices().length + "个", Toast.LENGTH_LONG).show();}}).show();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
这里有一个itemsCallbackMultiChoice()他的返回结果决定了checkbox 是否有选中和取消的效果。
- Custom Views
可以引入外部view的dialog
new MaterialDialog.Builder(MainActivity.this).customView(R.layout.custome_view,false).show();
- 1
- 2
- 3
效果:
customView( int layoutRes, boolean wrapInScrollView)
当我们将wrapInScrollView设置为true的时候就表示需要一个padding
假设布局中有个按钮我们要点击这个按钮关闭dialog可以这样操作
final MaterialDialog dialog = new MaterialDialog.Builder(MainActivity.this).customView(R.layout.custome_view, false).show();View customeView = dialog.getCustomView();Button button = (Button) customeView.findViewById(R.id.btn_closeCustome);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {dialog.dismiss();}});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- Input Dialogs
含有输入框的弹框
new MaterialDialog.Builder(MainActivity.this).title("输入窗").iconRes(R.drawable.ic_logo).content("包含输入框的diaolog")
// .widgetColor(Color.BLUE)//输入框光标的颜色.inputType(InputType.TYPE_CLASS_PHONE)//可以输入的类型-电话号码//前2个一个是hint一个是预输入的文字.input(R.string.input_hint, R.string.input_prefill, new MaterialDialog.InputCallback() {@Overridepublic void onInput(@NonNull MaterialDialog dialog, CharSequence input) {Log.i("yqy", "输入的是:" + input);}}).onPositive(new MaterialDialog.SingleButtonCallback() {@Overridepublic void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {if (dialog.getInputEditText().length() <=10) {dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);}else {dialog.getActionButton(DialogAction.POSITIVE).setEnabled(true);}}}).show();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
限制条件
输入类型是 .inputType(InputType.TYPE_CLASS_PHONE)//可以输入的类型-电话号码,限制输入长度是inputRange(11, 41, R.color.colorAccent)//限制输入的长度,只有在(11,41)长度内ok按钮才是可用的。限制长度还可以是在onInput()方法里处理。
if (dialog.getInputEditText().length() < 10) {dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);}else{dialog.getActionButton(DialogAction.POSITIVE).setEnabled(true);}while (dialogPro.getCurrentProgress()!=dialogPro.getMaxProgress()){if (dialogPro.isCancelled()) break;try {Thread.sleep(50);//模拟加载时间} catch (InterruptedException e) {break;}dialogPro.incrementProgress(1);}dialogPro.setContent("加载完成");
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- Progress Dialog
进度条弹框应该是用的比较多的了,但是这个的我感觉用起来不好,一般的点击加载进度
设置成水平的进度条
.progress(false, 100, true).progressNumberFormat("%1d/%2d")
- 1
- 2
//progress(boolean indeterminate, int max, boolean showMinMax)
// false 的话是水平进度条,true是等待圆环 最大值 是否显示数值,false的时候是不可以用progress这类的属性的灰报错:Cannot use setProgress() on this dialog.
没有一个加载进度的过程
- 1
- ColorDialog
有关颜色选择的相关弹框,选择的时候实现选择的回掉接口:ColorChooserDialog.ColorCallback
@Overridepublic void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {//此时选择的颜色}
- 1
- 2
- 3
- 4
- 5
- 6
new ColorChooserDialog.Builder(MainActivity.this,R.string.app_name).titleSub(R.string.input_hint) // title of dialog when viewing shades of a color.accentMode(false) // when true, will display accent palette instead of primary palette.doneButton(R.string.md_done_label) // changes label of the done button.cancelButton(R.string.md_cancel_label) // changes label of the cancel button.backButton(R.string.md_back_label) // changes label of the back button.preselect(Color.RED) // 开始的时候的默认颜色.dynamicButtonColor(true) // defaults to true, false will disable changing action buttons' color to currently selected color.show();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
可以自己定义筛选的颜色
int[] primary = new int[] {Color.parseColor("#F44336")};int[][] secondary = new int[][] {new int[] { Color.parseColor("#EF5350"), Color.parseColor("#F44336"), Color.parseColor("#E53935") }};new ColorChooserDialog.Builder(MainActivity.this, R.string.app_name)
// .titleSub(R.string.app_name).customColors(primary, secondary).doneButton(R.string.done).cancelButton(R.string.cancel).titleSub(R.string.done)//设置二级选择的标题
// .presetsButton(R.string.input_hint)//从RRGB切换到CUstome的文字提示.show();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
new ColorChooserDialog.Builder(MainActivity.this, R.string.app_name).allowUserColorInput(false).customButton(R.string.md_custom_label).presetsButton(R.string.md_presets_label).show();
- 1
- 2
- 3
- 4
- 5
- File Selector Dialogs
文件弹框
new FileChooserDialog.Builder(MainActivity.this).initialPath("/sdcard/Download") // changes initial path, defaults to external storage directory.mimeType("image/*") // Optional MIME type filter.extensionsFilter(".png", ".jpg") // Optional extension filter, will override mimeType().tag("optional-identifier").goUpLabel("Up") // custom go up label, default label is "...".show();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
实现接口
@Override
public void onFileSelection(@NonNull FileChooserDialog dialog, @NonNull File file) {
//选择文件
}
dialog第三方框架,material-dialogs的使用相关推荐
- Android 项目中用得最多最火的第三方框架可能都在这里了!你有没有错过?
平时读博客搜 GitHub 多了,总会发现一些大家都在比较推崇的第三方框架,觉得非常不错暂时又用不到,于是就打算把它们都收藏起来,需要用到的时候就不用到处问到处搜了.收藏得多了,本着热爱分享拥抱开源的 ...
- 常用的iOS第三方框架
转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与To ...
- 25000字总结Android优秀的第三方框架、各种学习资料汇集 二 Camera、Video、指纹、聊天IM、投屏等等
前言 前几天总结了Android中常用到的系统组件.Design组件.自定义组件等等系列 点击跳转地址: 25000字总结Android优秀的第三方框架.各种学习资料汇集 一 系统组件.Design组 ...
- 常用的第三方框架汇总
Android热门三方库源码面试宝典 工具类合集: https://github.com/Blankj/AndroidUtilCode (32k) https://blankj.com/2016/07 ...
- Android专题-常用第三方框架
Android专题-常用第三方框架 HTTP网络请求 带*号的是个人推荐比较好用的 HTTP网络请求 okhttp * :https://github.com/square/okhttp retrof ...
- Swift之SDWebImage第三方框架
在学习Swift过程中,最害怕的使用了OC的第三方框架 好不容易配置成功了,却出现了意外的Bug [UIImageView setImageWithURL:]: unrecognized select ...
- React-Native 之 GD (一)目录结构与第三方框架使用与主题框架搭建
1.APP效果图 2.工程环境配置 IOS: 将压缩包内的 Images.xcassets 文件夹直接替换掉我们iOS工程中的 Images.xcassets 文件夹. 这时候我们可以看到所有图片资源 ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )
众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编 ...
- cocoapods管理第三方框架
2019独角兽企业重金招聘Python工程师标准>>> 1. gem sources -l -> *** CURRENT SOURCES *** https://ruby.ta ...
- Day2 : iOS第三方框架MBProgressHUD学习笔记
今天主要学习了MBProgressHUD,受益匪浅.MB实现了弹出提示,可以很快捷的集成到项目中去.不得不说,得益于GitHub上丰富的开源第三方框架,开发工作变得非常的简便,优雅. 1.可以在弹出提 ...
最新文章
- 震惊 Guava 竟然有坑
- 某大学2021秋季学期Java期末考试范围概述
- (2)双机调试+符号文件
- 没有Hyper-V服务,WP Emulator无法启动
- 修改git commit默认触发的编辑器
- 基于以太坊网络的智能合约开发、部署和测试(入门)
- leetcode57. 插入区间
- python与matlab哪个更容易学-详解python和matlab的优势与区别
- Windows下Github使用方法
- php sql 中文编码,php sql如何设置编码
- [bzoj3217]ALOEXT
- 获取以及自定义User-Agent在URLSession, NSURLConnection, WKWebView iOS
- 【光学设计】- 第一节
- html格式蠕虫病毒,XiaoBa自制蠕虫病毒[2018-1-10]
- pip3 install -U qcloud-python-sts 安装失败解决方法
- Python 打印购物小票
- 每周开源项目推荐计划
- ISP(二) Demosiac 去马赛克 (CIP)
- 关于google浏览器打不开网页问题之容易被忽略的点
- 【JavaSocket编程】实现P2P客户端与服务器端双向传输数据(附代码)
热门文章
- Codeforce - 1040B - Shashlik Cooking(思维)
- html标题居中加背景色,如何设置CSS背景宽度后让文字居中?
- java更新word目录_java aspose.words 生成word目录和更新目录
- 记录springboot 启动时报错:no profiles are currently active
- 宏晶微MS2109高清视频采集芯片资料
- 干货 | 闪电网络应用开发速成指南
- cannot be applied to
- Python-文件操作
- Hadoop2.7.1+Hbase1.2.1集群环境搭建(5)hbase安装
- ttest函数使用方法_【Excel函数】TTEST函数 - 曹海峰个人博客