Android开发之BottomSheetDialog组件的使用

 更新时间:2023年01月09日 10:50:29   作者:别偷我的猪_09  
BottomSheetDialog是底部操作控件,可在屏幕底部创建一个支持滑动关闭视图。本文将通过示例详细讲解它的使用,感兴趣的小伙伴可以了解一下

Bottom Sheet

Bottom Sheet 是 Design Support Library 23.2 版本引入的一个类似于对话框的控件,可以暂且叫做底部弹出框。Bottom Sheet 中的内容默认是隐藏起来的,只显示很小一部分,可以通过在代码中设置其状态或者手势操作将其完全展开,或者完全隐藏,或者部分隐藏。

有两种类型的 Bottom Sheet:

1. Persistent bottom sheet: 通常用于显示主界面之外的额外信息,它是主界面的一部分,只不过默认被隐藏了,其深度(elevation)跟主界面处于同一级别;还有一个重要特点是在 Persistent bottom sheet 打开的时候,主界面仍然是可操作的,其实 Persistent bottom sheet 不能算是一个控件,因为它只是一个普通的布局在 CoordinatorLayout 这个布局之下所表现出来的特殊行为。所以其使用方式跟普通的控件也很不一样,它必须在CoordinatorLayout 中,并且是CoordinatorLayout 的直接子 View 。

  • app:layout_behavior="@string/bottom_sheet_behavior", 定义了这个属性就相当于告诉了 CoordinatorLayout 该布局是一个 bottom sheet, 它的显示和交互和普通的 view 不同。@string/bottom_sheet_behavior 是一个定义在支持库中的字符串,等效于 android.support.design.widget.BottomSheetBehavior 。

Bottom Sheets 具有物种状态:

  • STATE_COLLAPSED: Bottom Sheets 是可见的,但只显示可视高度(即部分可见)。此状态通 常是底部工作表的“静止位置”。可视高度由开发人员选择,应足以表明有额外的内容,允许用 户触发某个动作或扩展 Bottom Sheets;
  • STATE_EXPANDED: Bottom Sheets 是可见的并且它是最大高度并且不是拖拽或沉降;
  • STATE_DRAGGING: 用户主动向上或向下拖动 Bottom Sheets;
  • STATE_SETTLING: 拖动/轻扫手势后,Bottom Sheets 将调整到特点高度。这将是可视高 度,展开高度或0,以防用户操作导致底部表单隐藏;
  • STATE_HIDDEN: Bottom Sheets 隐藏;

如果已经在 Activity 使用 CoordinatorLayout,添加底部表单很简单:

1. 将任何视图添加为 CoordinatorLayout 的直接子视图。

2. 通过在 xml 里添加如下属性:

app:layout_behavior="@string/bottom_sheet_behavior"

"@string/bottom_sheet_behavior" == "com.google.android.material.bottomsheet.BottomSheetBehavior",是定义在支持库中的字符串。

3. 设置所需的行为标志:

  • app:behavior_hideable: 是否可以通过拖拽隐藏底部表单。
  • app:behavior_peekHeight: 折叠状态的窥视高度。
  • app:behavior_skipCollapsed: 如果底部表单可隐藏,并且设置为 true, 则表单不会处于折叠 状态。

BottomSheetBehavior

bottom sheet 的状态是通过 BottomSheetBehavior 来设置的,因此需要先得到 BottomSheetBehavior 对象,然后调用 BottomSheetBehavior.setState() 来设置状态,比如设置为折叠状态。当然也可以使用 getState() 来获取当前状态。

// TODO 得到 BottomSheetBehavior 对象
bottomSheetBehavior = BottomSheetBehavior.from(binding.bottomSheet);
// TODO 设置为折叠状态
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
// TODO 获取当前 BottomSheetBehavior 的状态
bottomSheetBehavior.getState()

要监听 Bottom Sheet 的状态变化则要使用 addBottomSheetCallback() 方法,之所以要监听是因为 Bottom Sheet 的状态还可以通过手势来改变。

bottomSheetBehavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) {
                Log.i("HL", "newState" + newState);
            }
            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
                Log.i("HL", "sdeOffset: " + slideOffset);
            }
        });

2. 模态 bottom sheet: 顾名思义,模态的 bottom sheet 在打开的时候会阻止和主界面的交互,并且在视觉上会在 bottom sheet 背后加一层半透明的阴影,使得看上去深度(evelation)更深。

BottomSheetDialog

BottomSheetDialog 是拥有 MD 风格的底部弹出框样式的 Dialog,其基本的使用为:

// TODO 创建 View 作为 BottomSheetDialog 的内容展示,
View bt = getLayoutInflater().inflate(R.layout.dialog_bottom_sheet, null);
// TODO 将 View 添加进来
mBottomSheetDialog.setContentView(bt);
mBottomSheetDialog.show();

完整 Demo

链接: https://pan.baidu.com/s/1ozPLg2j8pByY4lk0XnSI2Q

提取码: bsu8 

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

相关文章

  • Android开发之开关按钮控件ToggleButton简单用法示例

    Android开发之开关按钮控件ToggleButton简单用法示例

    这篇文章主要介绍了Android开发之开关按钮控件ToggleButton简单用法,结合实例形式分析了Android开关按钮控件ToggleButton的相关xml布局与调用操作技巧,需要的朋友可以参考下
    2017-12-12
  • 详解Android中AsyncTask机制

    详解Android中AsyncTask机制

    在Android当中,提供了两种方式来解决线程直接的通信问题,一种是通过Handler的机制,还有一种就是今天要详细讲解的 AsyncTask 机制,对android中asynctask相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • Android.mk文件使用速通手册

    Android.mk文件使用速通手册

    本文将简要介绍 Android.mk 的使用,看完本文,你将学会如何将自己的代码通过 Android.mk 来编译到工程中,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果(推荐)

    Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果(推荐)

    这篇文章主要介绍了 Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-01-01
  • Android实现简单旋转动画

    Android实现简单旋转动画

    这篇文章主要为大家详细介绍了Android实现简单旋转动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • android将搜索引擎设置为中国雅虎无法搜索问题解决方法

    android将搜索引擎设置为中国雅虎无法搜索问题解决方法

    android 进入搜索,将搜索引擎设置为中国雅虎,无法搜索到相关网络结果,该问题是由于yahoo的搜索接口改变导致,具体解决方法如下,感兴趣的朋友可以参考下哈
    2013-06-06
  • 深入剖析Android消息机制原理

    深入剖析Android消息机制原理

    本篇文章主要介绍了Android消息机制,深入的了解了android的消息机制,需要的朋友可以了解一下、
    2016-11-11
  • Android使用URL读取网络资源的方法

    Android使用URL读取网络资源的方法

    这篇文章主要为大家详细介绍了Android使用URL读取网络资源的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android常见XML转义字符(总结)

    Android常见XML转义字符(总结)

    下面小编就为大家带来一篇Android常见XML转义字符(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Android应用开发之代码混淆

    Android应用开发之代码混淆

    Android项目中的混淆很easy,之所以写这篇总结是由于近期发现公司的代码居然没有混淆,反编译后代码随手可得。很震惊。
    2014-07-07

最新评论