Android学习之BottomSheetDialog组件的使用


Posted in Java/Android onJune 21, 2022

基本介绍

BottomSheetDialog是底部操作控件,可在屏幕底部创建一个支持滑动关闭视图。

目前依赖使用如下:

implementation 'com.google.android.material:material:1.4.0'

基础使用

BottomSheetDialog需要为它添加视图内容,类似Dialog,且BottomSheetDialog的高度由自定义视图决定。

var text = TextView(this@UIBottomSheetAC)
         text.text = "BottomSheetDialog"
         var linearLayout = LinearLayout(this@UIBottomSheetAC)
         linearLayout.addView(text)
         linearLayout.setBackgroundColor(Color.YELLOW)
         linearLayout.layoutParams = LinearLayout.LayoutParams(-1,500)
         val bottomSheetDialog =
             BottomSheetDialog(context, R.style.bottom_sheet_dialog)
         bottomSheetDialog.setContentView(linearLayout)
         bottomSheetDialog.show()

其他功能实现

圆角样式实现

BottomSheetDialog官方默认样式是矩形弹窗并不带圆角设置。但在日常开发中会遇到需要圆角弹窗设计要求需要对BottomSheetDialog默认样式做一些调整才能实现。

BottomSheetDialog样式文件

<style name="bottom_sheet_dialog" parent="Theme.Design.Light.BottomSheetDialog">
    <item name="bottomSheetStyle">@style/bottom_sheet_style_wrapper</item>
</style>
<style name="bottom_sheet_style_wrapper" parent="Widget.Design.BottomSheet.Modal">
    <item name="android:background">@android:color/transparent</item>
</style>

布局背景圆角

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/holo_blue_light" />
    <corners
        android:topLeftRadius="15dp"
        android:topRightRadius="15dp" />
</shape>

代码配置

// 视图背景增加圆角样式
linearLayout.background = getDrawable(R.drawable.ui_shape_top_radius15)
// bottomSheetDialog设置透明背景样式
val bottomSheetDialog =
    BottomSheetDialog(context, R.style.bottom_sheet_dialog)

Android学习之BottomSheetDialog组件的使用

去弹窗外部遮罩阴影

增加android:backgroundDimEnabled属性为false实现无背景阴影遮罩效果。

<style name="bottom_sheet_dialog" parent="Theme.Design.Light.BottomSheetDialog">
    <item name="bottomSheetStyle">@style/bottom_sheet_style_wrapper</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

Android学习之BottomSheetDialog组件的使用

带阴影

Android学习之BottomSheetDialog组件的使用

不带阴影

关闭触发设置

  • 是否支持拖拽关闭通过设置setCancelable方法实现。
  • 是否支持点击视图外部关闭弹窗通过setCanceledOnTouchOutside方法实现
bottomSheetDialog.setCancelable(false)
bottomSheetDialog.setCanceledOnTouchOutside(true)

列表视图使用

使用列表功能也是可以直接实现,添加ListView即可,列表高度可设置ViewGroup.LayoutParams实现(默认情况下若列表数据较多会撑满整个屏幕)。

Button(this).run {
    it.addView(this)
    text = "BottomSheetListDialog"
    setOnClickListener {
        var listView = ListView(this@UIBottomSheetAC)
        listView.adapter =
            ArrayAdapter<String>(
                this@UIBottomSheetAC,
                android.R.layout.simple_list_item_1,
                values
            )
        var coordinatorLayout = CoordinatorLayout(this@UIBottomSheetAC)
        val params = ViewGroup.LayoutParams(
            resources.displayMetrics.widthPixels,
            resources.displayMetrics.heightPixels
        )
        coordinatorLayout.addView(listView)
        val bottomSheetDialog =
            BottomSheetDialog(context, R.style.bottom_sheet_dialog)
        bottomSheetDialog.setContentView(coordinatorLayout,params)
        bottomSheetDialog.show()
    }
}

但使用BottomSheetBehavior要求根布局必须是CoordinatorLayout否则会报错。

Android学习之BottomSheetDialog组件的使用

val bottomSheetBehavior = BottomSheetBehavior.from(coordinatorLayout)
        bottomSheetBehavior.peekHeight = resources.displayMetrics.heightPixels * 3 / 4
        bottomSheetBehavior.addBottomSheetCallback(object :
            BottomSheetBehavior.BottomSheetCallback() {
            override fun onSlide(bottomSheet: View, slideOffset: Float) {

            }

            override fun onStateChanged(bottomSheet: View, newState: Int) {
                if (newState == BottomSheetBehavior.STATE_HIDDEN) {
                    bottomSheetDialog.dismiss()
                }
            }
        })

到此这篇关于Android学习之BottomSheetDialog组件的使用的文章就介绍到这了,更多相关Android BottomSheetDialog内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Java/Android 相关文章推荐
教你用Java Swing实现自助取款机系统
Jun 11 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
SpringBoot 拦截器妙用你真的了解吗
Jul 01 Java/Android
详解Java七大阻塞队列之SynchronousQueue
Sep 04 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
Sep 25 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
SpringBoot2零基础到精通之数据库专项精讲
Mar 22 Java/Android
零基础学java之带参数以及返回值的方法
Apr 10 Java/Android
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
Apr 19 Java/Android
Android Studio 计算器开发
May 20 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
Spring boot admin 服务监控利器详解
Aug 05 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 #Java/Android
Mybatis-plus配置分页插件返回统一结果集
SpringCloud超详细讲解Feign声明式服务调用
Jun 21 #Java/Android
使用Postman测试需要授权的接口问题
Jun 21 #Java/Android
springboot集成redis存对象乱码的问题及解决
Jun 16 #Java/Android
SpringBoot使用AOP实现统计全局接口访问次数详解
Jun 16 #Java/Android
Java中的Kotlin 内部类原理
Jun 16 #Java/Android
You might like
php实现异步数据调用的方法
2015/12/24 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
js 幻灯片的实现
2011/12/06 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
python属于软件吗
2020/06/18 Python
Python通过format函数格式化显示值
2020/10/17 Python
Linux内核产生并发的原因
2012/07/13 面试题
大学生涯自我鉴定
2014/01/16 职场文书
厨师长岗位职责
2014/03/02 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
消防隐患整改通知书
2015/04/22 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
法律讲堂观后感
2015/06/11 职场文书
大学生安全教育主题班会
2015/08/12 职场文书