Android BottomSheetBehavior(底部弹窗)

目录

一、BottomSheetBehavior 介绍

二、BottomSheetBehavior 基本使用

2.1 在 CoordinatorLayout 中添加底部工作表:

2.2 在代码中获取 BottomSheetBehavior 实例:

2.3 设置工作表的状态,如展开、折叠等

2.4 工作表的状态

三、BottomSheetDialog

3.1 创建 BottomSheetDialog 实例:

3.2 设置对话框内容:

3.3 显示对话框

3.4 关闭对话框

3.5 布局

四、注意事项


一、BottomSheetBehavior 介绍

        BottomSheetBehavior 是 Material 库中的一个类,它用于实现底部工作表(Bottom Sheet)的交互行为。底部工作表是一个可以从屏幕底部向上滑动的交互式面板,通常用于显示与当前内容相关的补充信息或操作选项(如分享)。

        BottomSheetBehavior 允许你以可控制的方式实现底部工作表的显示和隐藏,以及与用户交互时的动画和手势。它提供了一些方法和回调来监控工作表的状态(例如折叠、展开或中间状态),以便你可以相应地调整应用程序的行为。

        你可以在布局文件中使用 CoordinatorLayoutBottomSheetBehavior 来定义一个视图作为底部工作表,并通过设置 app:layout_behavior 属性来关联 BottomSheetBehavior,从而定义其行为。

二、BottomSheetBehavior 基本使用

        要使用 BottomSheetBehavior,首先需要在布局文件中定义一个布局作为底部工作表,然后将其关联到 BottomSheetBehavior。以下是一个简单的步骤示例:

2.1 在 CoordinatorLayout 中添加底部工作表:

        app:layout_behavior="@string/bottom_sheet_behavior" 这个属性是必须的,否则无联动效果。

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><!-- 主页面布局元素 --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="20dp"android:orientation="vertical"><Buttonandroid:id="@+id/btn_show"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Show BottomSheets" /><Buttonandroid:id="@+id/btn_show_dialog"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Show BottomSheet Dialog" /></LinearLayout><!-- 底部工作表的内容布局 --><androidx.core.widget.NestedScrollViewandroid:id="@+id/bottom_sheet"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="parent"app:behavior_hideable="true"app:behavior_peekHeight="0dp"app:layout_behavior="@string/bottom_sheet_behavior"><!-- 在这里添加底部工作表的内容 --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/purple_200"android:gravity="center"android:textColor="@android:color/white"android:text="BottomSheets,上下拖动试试"/><ImageViewandroid:layout_width="match_parent"android:layout_height="200dp"android:layout_margin="10dp"android:scaleType="centerCrop"android:src="@mipmap/bg"/></LinearLayout></androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

2.2 在代码中获取 BottomSheetBehavior 实例:

class BottomSheetsActivity:AppCompatActivity() {private lateinit var binding: ActivityBottomSheetsBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityBottomSheetsBinding.inflate(layoutInflater)setContentView(binding.root)// 获取 BottomSheetBehaviorval behavior = BottomSheetBehavior.from<View>(binding.bottomSheet)// 设置底部工作表的状态监听器和行为behavior.addBottomSheetCallback(object : BottomSheetCallback() {override fun onStateChanged(bottomSheet: View, newState: Int) {Log.i("BottomSheetBehavior", "newState: $newState")}override fun onSlide(bottomSheet: View, slideOffset: Float) {Log.i("BottomSheetBehavior", "slideOffset: $slideOffset")}})        }}

监听内容:

2.3 设置工作表的状态,如展开、折叠等

        通过setState即可直接展开、折叠、隐藏

        binding.btnShow.setOnClickListener {//判断 BottomSheetBehavior 的状态if (behavior.state == BottomSheetBehavior.STATE_EXPANDED) {//如果展开的话,则关闭behavior.setState(BottomSheetBehavior.STATE_COLLAPSED)} else {//如果未展开,则展开behavior.setState(BottomSheetBehavior.STATE_EXPANDED)}}

        通过2.1-2.3,你可以在你的 Android 应用中实现一个基本的底部工作表,并控制它的显示、隐藏以及与用户交互时的行为和动画效果。

2.4 工作表的状态

/**正在拖动中*/
public static final int STATE_DRAGGING=1;、/**正在向下收起*/
public static final int STATE_SETLING=2;,/**展开*/
public static int STATE_EXPANDED=3;/**折叠*/
public static final int STATE_COLLAPSED=4;/**隐藏*/
public static final int STATE_HIDDEN=5;/**底部图纸展开一半(当fitToContents为false时使用)*/
public static final int STATE_HALF_EXPANDED=6;

三、BottomSheetDialog

        BottomSheetDialogAndroid 中 Dialog 类的一种变体,它以底部工作表(Bottom Sheet)的形式展示内容。底部工作表对话框从屏幕底部弹出,提供一种非常流行的用户界面模式,用于显示与当前操作或内容相关的选项、操作或信息。

        与普通的对话框不同,底部工作表对话框以一种半透明的方式在底部显示,用户可以通过向上滑动的手势将其展开或关闭。这种对话框通常用于显示辅助操作、快捷方式、选项或其他次要信息,以提供更流畅的用户体验。

        它提供了一个简便的方法,在底部以对话框的形式展示内容。以下是一个使用 BottomSheetDialog 的简单示例:

3.1 创建 BottomSheetDialog 实例:

val mBottomSheetDialog = BottomSheetDialog(this@BottomSheetsActivity)

3.2 设置对话框内容:

val mBottomSheetDialog = BottomSheetDialog(this@BottomSheetsActivity)
val bt: View = layoutInflater.inflate(R.layout.dialog_bottom_sheet, null)
mBottomSheetDialog.setContentView(bt)
// 设置对话框其他属性(可选)
mBottomSheetDialog.setCancelable(true); // 设置是否可以通过点击对话框外部取消对话框
mBottomSheetDialog.setCanceledOnTouchOutside(true); // 设置是否可以通过点击对话框外部区域取消对话框

3.3 显示对话框

mBottomSheetDialog.show()

        BottomSheetDialog 将使用你提供的布局作为其内容,并以底部工作表的样式显示在屏幕上。

3.4 关闭对话框

mBottomSheetDialog.dismiss()
记得在不需要时及时释放对话框以避免内存泄漏

3.5 布局

        布局就是常规布局,没有其他需要特殊注意的地方。

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="100dp"android:background="@color/purple_200"android:gravity="center"android:text="好好学习"android:textColor="@android:color/white"android:textSize="18sp"/><ImageView.../><TextView.../><ImageView../></LinearLayout>
</androidx.core.widget.NestedScrollView>

四、注意事项

  • 1.「内容高度与滚动」: 底部对话框内容应该被设计为可滚动的,特别是当内容超出屏幕高度时。这样可以确保用户在查看内容时能够进行滚动操作,而不会出现内容被遮挡的情况。

  • 2.「避免内容过多」: 底部对话框的设计目的是展示次要信息或辅助操作,不应该用于显示大量内容。保持内容简洁明了,让用户能够快速浏览和理解。

  • 3.「可取消性」: 考虑是否允许用户通过点击对话框外部或返回按钮来取消底部对话框。这可以通过设置 setCancelable() 和 setCanceledOnTouchOutside() 来实现。

  • 4.「适配不同屏幕尺寸」: 底部对话框在不同屏幕尺寸上可能会有不同的显示效果,因此确保内容在不同尺寸和密度的屏幕上均能正常显示和操作。

  • 5.「测试交互性能」: 在使用底部对话框前,进行交互性能测试是很重要的。特别是当对话框中包含复杂的交互元素或大量数据时,要确保在各种设备和条件下,对话框的滑动和交互性能都良好。

  • 6.「释放资源」: 当底部对话框不再需要时,确保及时释放资源,调用 dismiss() 方法关闭对话框,以避免内存泄漏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式系统未来的发展趋势走向???

人工智能和机器学习应用 模型优化&#xff1a; 为了在资源有限的嵌入式系统上运行&#xff0c;将会看到更多的努力投入到精简、优化和量化模型&#xff0c;以适应边缘计算的环境。 边缘推理&#xff1a; 嵌入式设备将更多地执行本地推理&#xff0c;而不是将所有数据发送到云端…

【设计模式--行为型--命令模式】

设计模式--行为型--命令模式 命令模式定义结构案例优缺点使用场景 命令模式 定义 将一个请求封装为一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行存储&#xff0c;传递&#xff0c;调用…

城轨线路列车时刻表与车站客流控制协同优化方法

文章信息 论文题目为《城轨线路列车时刻表与车站客流控制协同优化方法》&#xff0c;该文于2021年发表于《交通运输系统工程与信息》上。文章考虑换入客流影响下列车时刻表与客流控制的协同优化问题&#xff0c;以最小化乘车延误人数为目标&#xff0c;以列车时刻表、客流控制和…

java代码编写twitter授权登录

在上一篇内容已经介绍了怎么申请twitter开放的API接口。 下面介绍怎么通过twitter提供的API&#xff0c;进行授权登录功能。 开发者页面设置 首先在开发者页面开启“用户认证设置”&#xff0c;点击edit进行信息编辑。 我的授权登录是个网页&#xff0c;并且只需要进行简单的…

动物姿态估计:微调 YOLOv8 姿态模型

动物姿态估计是计算机视觉的一个研究领域&#xff0c;是人工智能的一个子领域&#xff0c;专注于自动检测和分析图像或视频片段中动物的姿势和位置。目标是确定一种或多种动物的身体部位&#xff08;例如头部、四肢和尾巴&#xff09;的空间排列。这项技术具有广泛的应用&#…

uniapp 单选按钮 选中默认设备

需求1&#xff1a;选中默认设备&#xff0c;113 和114 和139都可以选中一个默认设备 选中多个默认设备方法&#xff1a; async toSwitch(typeItem, title) {const res await this.setDefaultDev(typeItem.ibdr_devsn, typeItem.ibdr_pid)if (!res) {this.common.toast(切换默…

关于在Java中打印三角形图形的汇总

前面写过一些关于打印三角形图形代码的文章&#xff0c;这里进行了汇总&#xff0c;话不多说&#xff0c;直接上代码&#xff1a; /*** 关于打印三角形的汇总*/ public class Work1 {public static void main(String[] args) {int num 5;/** 打印如下图形&#xff1a;* ** …

OPCServer KEPServer安装和使用

OPCServer KEPServer安装和使用 简介 KEPServer软件是免费的&#xff0c;驱动收费&#xff0c;每天2小时试用时间, 免费用来模拟仿真是很不错的选择 OPC DA 和OPC UA都支持 中文官网地址: https://www.kepware.com/zh-cn/ 中文官方文档&#xff08;经常有更新&#xff0c;其…

分库分表及ShardingShpere-proxy数据分片

为什么需要分库&#xff1f; 随着数据量的急速上升&#xff0c;单个数据库可能会QPS过高导致读写耗时过长而出现性能瓶颈&#xff0c;所以需要考虑拆分数据库&#xff0c;将数据库分布在不同实例上提升数据库可用性。主要的原因有如下&#xff1a; 磁盘存储。业务量剧增&…

javaWebssh汽车销售管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh汽车销售管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

redis-学习笔记(Jedis zset 简单命令)

zadd & zrange zadd , 插入的第一个参数是 zset , 第二个参数是 score, 第三个参数是 member 成员 内部依据 score 排序 zrange 返回 key 对应的 对应区间内的值 zrangeWithScore 返回 key 对应的 对应区间内的值和分数 示例代码 zcard 返回 key 对应的 zset 的长度 示例代…

05-命令模式

意图&#xff08;GOF定义&#xff09; 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户端进行参数化&#xff0c;对请求排队或者记录日志&#xff0c;以及可支持撤销的操作。 理解 命令模式就是把一些常用的但比较繁杂的工作归类为成一组一组的动作&…

Linux环境下maven的安装

到官网下载maven 步入下面的地址选择合适的maven版本 https://dlcdn.apache.org/maven/ 以笔者为例&#xff0c;选择了3.5.4这个版本 将maven上传到Linux服务器并解压 tar -zxvf apache-maven-3.5.4-bin.tar.gz配置环境变量 我们使用vim编辑profile vim /etc/profile环境…

【数据结构(十一·多路查找树)】B树、B+树、B*树(6)

文章目录 1. 二叉树 与 B树1.1. 二叉树存在的问题1.2. 多叉树 的概念1.3. B树 的基本介绍 2. 多叉树——2-3树2.1. 基本概念2.2. 实例应用2.3. 其他说明 3. B 树、B树 和 B*树3.1. B树 的介绍3.2. B树 的介绍3.2. B*树 的介绍 1. 二叉树 与 B树 1.1. 二叉树存在的问题 二叉树…

react Hooks(useEffect)实现原理 - 简单理解

useEffect 语法&#xff1a; useEffect(setup, dependencies?) 含义: useEffect 是一个 React Hook&#xff0c;它允许你 将组件与外部系统同步。 useEffect 源码简单理解 一、mountEffect 和 upadateEffect useEffect 与其它 hooks 一样分为 mountEffect 和 upadateEffec…

I2C总线通信(温湿度实验)

1.使能GPIOF时钟 2.将PF14设置为输出&#xff0c;PF15也可以先设置为输出 3.设置输出速度最高档位速度 4.SI7006的初始化 5.读取温度、湿度 6.将读取到的温度湿度数据通过计算公式进行转换 7.将结果输出 main.c #include "si7006.h"extern void printf(cons…

工科数学分析(华南理工大学)

旷了三天课&#xff0c;估计要被薄纱了这下&#xff08;&#xff09; ----------------引言 第一节 集合与实数集 比较重要的是实数具有稠密性。 即在两个实数之间存在无穷个其他实数&#xff0c; 然后是绝对值不等式 第一个经常用来放缩不等式&#xff0c;证明极限 第二…

DENet:用于可见水印去除的Disentangled Embedding网络笔记

1 Title DENet: Disentangled Embedding Network for Visible Watermark Removal&#xff08;Ruizhou Sun、Yukun Su、Qingyao Wu&#xff09;[AAAI2023 Oral] 2 Conclusion This paper propose a novel contrastive learning mechanism to disentangle the high-level embedd…

Debian 系统镜像下载

最近在看一些网络相关的文章需要用到 debian 11.x 的系统网上找了好多都发下载&#xff0c;在官网看一下 有个 11.8 的版本我无法下载&#xff0c;提示被最新的 debian-12.4.0 所代替&#xff0c;于是找到了这个链接 Index of /cdimage/unofficial/non-free/cd-including-fi…

imazing是什么软件

imazing是什么软件 iMazing 是世界上最值得信赖的软件,可以将您的信息、音乐、文件和数据从 iPhone 或 iPad 传输到您的 Mac 或 PC。 获得备份、数据提取、媒体和文件传输的强大能力,以及更多 iMazing 功能。 iMazing是一款第三方的苹果iOS设备管理软件。 iMazing- 2 Mac-安装…