Android Material-dialogs的使用(kotlin)
文章目录
- 前言
- 一、Material-dialogs是什么?
- 二、使用步骤
- 1.引入库
- 2.使用弹窗
- 总结
前言
这篇文章是对框架Material-dialogs的使用的总结,如果已经熟练使用,那这篇文章对您毫无帮助
提示:以下是本篇文章正文内容,下面案例可供参考
一、Material-dialogs是什么?
Material-dialogs为一个弹窗的框架,帮助我们快速搭建各种弹窗,使用这个框架的理由只有一个,它是kotlin,并且具有高度自定义性,此文章默认读者已经会基本使用kotlin
二、使用步骤
1.引入库
1.导入项目
它有几种弹窗可以分别导入,可根据项目需要导入,最基本的是需要导入下面这个:
implementation 'com.afollestad.material-dialogs:core:3.3.0'
其他还有
- 带输入文本的弹窗:
implementation 'com.afollestad.material-dialogs:input:3.3.0'//
- 选择文件的弹窗:
implementation 'com.afollestad.material-dialogs:files:3.3.0'
- 颜色选择弹窗:
implementation 'com.afollestad.material-dialogs:color:3.3.0'
- 时间选择弹窗:
implementation 'com.afollestad.material-dialogs:datetime:3.3.0'
- 底部弹窗:(本文章必定使用)
implementation 'com.afollestad.material-dialogs:bottomsheets:3.3.0'
- 绑定LifeCycle(本文章必定使用)
implementation 'com.afollestad.material-dialogs:lifecycle:3.3.0'
2.使用弹窗
- 自定义弹窗(本处为等待框的实现)
注意看代码,代码中有注释噢~
fun FragmentActivity.showWaitDialog(): MaterialDialog {return MaterialDialog(this).show {customView( //自定义弹窗viewRes = R.layout.base_dialog_wait,//自定义文件dialogWrapContent = true, //让自定义宽度生效scrollable = true, //让自定义宽高生效noVerticalPadding = true //让自定义高度生效)lifecycleOwner(this@showWaitDialog)//绑定生命周期cancelOnTouchOutside(false) //点击外部不消失}
}
效果:
- 底部显示的网格式弹窗(需导入底部弹窗)
注意看代码,代码中有注释噢~
/*** 底部显示的GridLayout* @param list 带图片和文字的BasicGridItem*/
fun FragmentActivity.showBottomGridDialog(list: List<BasicGridItem>,listener: GridItemListener<BasicGridItem>
): MaterialDialog {return MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show {cornerRadius(res = R.dimen.dp_10)//圆角弧度gridItems(items = list, selection = listener)//子项lifecycleOwner(this@showBottomGridDialog)//绑定生命周期}
}
- LayoutMode.WRAP_CONTENT:根据加入的list的多少自适应高度,如果不指定,则默认是MATCH_PARENT;
- 如果item数量一行无法放置,则会自动换行放置
- 当item被点击时,弹窗会自动消失,如果不需要自动消失,则可以加入
noAutoDismiss()
调用:
override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val items = arrayListOf(BasicGridItem(R.drawable.image_empty, "第一个"),//图片,文本BasicGridItem(R.drawable.image_empty, "第二个"),BasicGridItem(R.drawable.image_empty, "第三个"))showBottomGridDialog(items) { dialog, index, item ->kotlin.run {//执行点击后的逻辑处理}}}
效果:
- 底部显示列表的弹窗
fun FragmentActivity.showBottomListDialog(items: List<String>,listener: ItemListener
): MaterialDialog {return MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show {listItems(items = items, selection = listener)lifecycleOwner(this@showBottomListDialog)}
}
调用:
showBottomListDialog(arrayListOf("第一个", "第二个")) { dialog, index, text ->kotlin.run {ToastUtils.showShort(text[0].toString())}}
- 如果列表内数据过多,则默认可以滑动
效果:
- 自定义Adapter
注意看代码,代码中有注释噢~
fun FragmentActivity.showCustomBottomListDialog(adapter: RecyclerView.Adapter<*>): MaterialDialog {return MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show {cornerRadius(res = R.dimen.dp_20)//背景框的圆角弧度 customListAdapter(adapter)//自定义的适配器,默认为垂直的列表//也可以为gridlayout的效果//customListAdapter(adapter, GridLayoutManager(this@showCustomBottomListDialog, 3))lifecycleOwner(this@showCustomBottomListDialog)//绑定生命周期}
}
调用:
lateinit var dialog: MaterialDialogoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)dialog = showCustomBottomListDialog(CustomAdapter())}//自定义Adapter,这个大家都懂,我就不注释啦inner class CustomAdapter : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {val binding: BaseDialogWaitBinding? = DataBindingUtil.bind(itemView)}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {return ViewHolder(DataBindingUtil.inflate<BaseDialogWaitBinding>(LayoutInflater.from(parent.context), R.layout.base_dialog_wait, parent, false).root)}override fun onBindViewHolder(holder: ViewHolder, position: Int) {holder.binding?.text?.text = "第${position}个"holder.binding?.executePendingBindings()holder.binding?.root?.setOnClickListener {dialog.dismiss()}}override fun getItemCount(): Int {return 10}}
垂直效果:
网格效果:
- 设置颜色
<style name="customDialogBg"><!-- 背景颜色--><item name="md_background_color">#000000</item><!-- 点击时的涟漪颜色--><item name="md_ripple_color">#000000</item><!-- 标题字体颜色--><item name="md_color_title">#998899</item><!-- 内容字体颜色--><item name="md_color_content">#873187</item><!-- 按钮字体颜色--><item name="md_color_button_text">#270E27</item></style>
MaterialDialog(this).show {.....setTheme(R.style.customDialogBg).....}
总结
提示:时间有限,本文章没有涵盖到所有的用法,读者需举一反三用于自己的项目噢,更多用法需要根据自己需要自行探索噢,附上github传送门
Android Material-dialogs的使用(kotlin)相关推荐
- Android Material Design按钮样式设计
Today we'll dive deep into Android Buttons in Material Design and develop an application that showca ...
- Android Material Components – MaterialAlertDialog
Material Design 2.0 is out and we can't wait to get our hands on Dialogs. In this tutorial, we'll be ...
- Material Dialogs库的使用
Material Dialogs 查看全文 http://www.taodudu.cc/news/show-4259806.html 相关文章: 芯片的IR drop是什么 神经网络编译器图层面IR ...
- Android Material Design按钮样式
本文翻译自:Android Material Design Button Styles I'm confused on button styles for material design. 我对材质设 ...
- Android Material Design :LinearLayoutCompat添加分割线divider
Android Material Design :LinearLayoutCompat添加分割线divider Android Material Design 扩展支持包中的LinearLayo ...
- Android Material风格的应用(三)--DrawerLayout
添加抽屉导航 Android Material风格的应用(一)--AppBar TabLayout Android Material风格的应用(二)--RecyclerView Android Mat ...
- Android Material Design TabLayout属性app:tabMode和app: tabGravity
Android Material Design TabLayout属性app:tabMode和app: tabGravity Android Material Design 中的TabLayout有两 ...
- android夜间模式揭露动画,Android Material Design系列之夜间模式
今天我们讲讲夜间模式的实现,这篇文章的名字应该叫:<Android Material Design系列之夜间模式>.在Android 5.0 之后,实现夜间模式并非很难了,支持的5.0库提 ...
- android material 颜色值,Android Material Colors 谷歌 Material Design 标准颜色
Android Material Colors 谷歌 Material Design 标准颜色. 调色板资源文件通过 doc-getter 自动抓取生成. 运行 Demo 来查看效果. Usage G ...
- Android Material文本字段
In this tutorial, we'll implement Text Fields using the new Material Design Components Library. We h ...
最新文章
- 微信小程序点餐+SpringBoot(包括后台)
- 关闭windows窗口时操作
- 交换esc和左ctrl ;caps lock与右ctrl
- 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )
- go build和go install的区别
- C语言实现并查集(Disjoint set或者Union-find set)(附完整源码)
- 深度学习数据自动编码器_如何学习数据科学编码
- C加加学习之路 1——开始
- javascript 以“年-月-日 时:分:秒”格式显示当前时间
- 短短几分钟快速带你掌握C语言指南针!
- 复合视频信号CVBS解析
- 六,华为交换路由做NAT五种方法
- 三角函数及其之间的关系
- 中国银行软件中心信息技术岗(北京 )面试
- TikTok三大流行趋势 钛动带你看懂TikTok
- 北大计算机专硕学费,北京大学专业硕士学费被曝高达2.2万元/年
- CloudBu面试题
- 秀一段《易语言》的源代码
- matlab为什么生成obj文件,为文件输入和输出创建新的 System object
- sub html编辑器,目前前端开发必备编辑器有哪几款呢?
热门文章
- 阿里P7级别面试经验总结,完整版开放下载
- 物联网开发 无线433MHz安防报警系统 上
- SQL2012数据库还原数据的时候提示: 还原数据库时失败解决方案
- qemu指定CPU型号
- Google Earth Engine APPS(GEE)——使用 AREA2 和 CODED 估算森林砍伐和退化面积巴西森林砍伐案例总览
- Schema hasn‘t been registered for model 解决方案
- 联想全球裁员 MOTO移动业务被砍掉超过一半
- 2021年6月1日大学化学无机原理(12)——第六章四个量子数、多电子的核外排布。
- 补充STM32 PWM占空比,频率的计算及输入捕获细节到STM32库函数的掌握方法
- Google浏览器删除的书签怎么恢复?