Android BottomSheetBehavior(底部弹窗)

2023-12-14 07:20

本文主要是介绍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() 方法关闭对话框,以避免内存泄漏。

这篇关于Android BottomSheetBehavior(底部弹窗)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491634

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl