在 Material Design 中,Bottom Sheet Dialog 是一个非常常见和有用的控件。它可以作为一种交互方式,让用户操作和内容更加便捷和自然,同时也让应用在视觉上更加美观和充实。那么,本文将详细介绍在 Material Design 中如何实现 Bottom Sheet Dialog。
什么是 Bottom Sheet Dialog?
Bottom Sheet Dialog 是一种可以从应用底部滑出的对话框,通常包含一些有用的操作,比如:分享、添加、保存、查看等等。Bottom Sheet Dialog 在 Material Design 中非常常见,而且使用也很便利,可以让应用在用户体验上更加自然和优雅。
Bottom Sheet Dialog 有两种形式:
- Modal Bottom Sheet: 它是一个模态的 Bottom Sheet Dialog,可以在应用底层弹出,屏幕其他部分变得阴暗。它最适合用户与应用进行交互和操作,比如:显示一个列表、分享、评论等等。
- Bottom Sheet Persistent: 它是一个非模态的 Bottom Sheet Dialog,可以作为应用的一个组成部分进行显示。它最适合显示大段的内容或者需要一直显示在屏幕上的操作或信息。
如何实现 Bottom Sheet Dialog?
在 Material Design 中,Bottom Sheet Dialog 可以通过使用 Android 自带的 BottomSheetDialog 实现。在实现 Bottom Sheet Dialog 之前,需要确保项目中已经引入了 Material Design 的相关依赖,比如:
implementation 'com.google.android.material:material:1.3.0'
实现 Modal Bottom Sheet
步骤 1: 准备布局文件
在Bottom Sheet Dialog 中,需要为其提供一个布局文件。可以使用自定义布局文件,也可以使用 Material Design 提供的布局文件。在这里,我们使用 Material Design 自带的布局文件作为示例:
-- -------------------- ---- ------- ----- ------------- ------------------ ------------- ---------------------------------------------------------- ----------------------------------- ------------------------------------ ------------------------------- --------- ----------------------- ----------------------------------- ------------------------------------ ------------------------------- ----------------------------------- ------------------- ----- ----------------------- -- ------- -------------------------- ----------------------------------- ------------------------------------ ------------------------------- -------------------- -- ------- ------------------------- ----------------------------------- ------------------------------------ ------------------------------- ------------------- -- ------- --------------------------- ----------------------------------- ------------------------------------ ------------------------------- --------------------- -- ---------------
这样一个简单的布局文件里面包含了一个标题、3个操作按钮和一个取消按钮,可以实现用户进行内容分享、保存和取消操作。
步骤 2: 创建 Bottom Sheet Dialog
接下来,需要创建一个 Bottom Sheet Dialog 对象,并指定其布局文件。在这里,我们选择创建 Modal Bottom Sheet Dialog:
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this); View bottomSheetView = getLayoutInflater().inflate(R.layout.layout_bottom_sheet, null); bottomSheetDialog.setContentView(bottomSheetView);
步骤 3: 显示 Bottom Sheet Dialog
创建完 Bottom Sheet Dialog 后,还需要通过代码触发它进行显示。在这里,我们选择通过点击一个按钮,弹出 Bottom Sheet Dialog:
Button btnOpenBottomSheet = findViewById(R.id.btnOpenBottomSheet); btnOpenBottomSheet.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { bottomSheetDialog.show(); } });
综上所述,我们完成了 Modal Bottom Sheet Dialog 的实现。此时,点击按钮即可弹出 Modal Bottom Sheet Dialog 进行交互和操作。
实现 Persistent Bottom Sheet
实现 Persistent Bottom Sheet 和 Modal Bottom Sheet 的区别在于,Persistent Bottom Sheet 不需要手动触发,而是随着页面的滚动而产生。接下来,将介绍如何实现一个简单的 Persistent Bottom Sheet,示例如下:
-- -------------------- ---- ------- ----- ------------- ------------------ ---------------------------------------------------- ---------------------------------------------------------- ----------------------------------- ------------------------------------ -------------------------------- - ------------- ----------------------------------- ----------------------------- --------------------------------- ------------------------------ ----------------------- ------------------------------- ---------------------- - --------- ----------------------- ----------------------------------- ------------------------------------ ------------------- ----- ----------------------- -- --------- -------------------------- ----------------------------------- ------------------------------------ ---------------------- ----- ----------------------- -------------------------- -- ------- --------------------------- ----------------------------------- ------------------------------------ ---------------- ---- ------- -- --------------- ------------------------------------------ --------------------------- ----------------------------------- ------------------------------------ ---------------------------------------------- ------------------------------------------ ------------------------ ----------------------------- -- ------------------------------------------------------
这个布局文件包含了一个 RecyclerView 和一个 LinearLayout。LinearLayout 是 Persistent Bottom Sheet 的主体部分,RecyclerView 是主页面的内容,使用这种方式布局文件与页面布局文件是合并的。
接下来,需要在 Java 中创建 Bottom Sheet Callback obj,代码如下:
-- -------------------- ---- ------- ------- --------------------------------------- -------------------- - --- ----------------------------------------- - --------- ------ ---- ----------------------- ---- ----- --- --------- - ---------- ----- ------ ------- - --------- ------ ---- ---------------- ---- ----- ----- -- - ----------------------------------- - --
接着,在 Activity 中进行 Bottom Sheet 初始化,同时将 Bottom Sheet 关联的 RecyclerView 放入其中
-- -------------------- ---- ------- ------- ------------------- -------------------- ------ ---- ----------------- - ------------ ----------- - -------------------------------- ------------------- - -------------------------------------- --------------------------------------- -------- ------------ --------- - ----------------------------- ------------------------------ ----------------------------------------------------------------- -
这里使用了 Android 中提供的 BottomSheetBehavior 对象,用于管理 Bottom Sheet 的滑动状态和行为。设置方法主要有:
setBottomSheetCallback() setPeekHeight() - 可以设置 Bottom Sheet 最小和最大高度 setState() - 控制 Bottom Sheet 的状态
最后,要在主页面中添加滑动监听事件,用于管理下拉关联到底部的状态:
-- -------------------- ---- ------- ---------------------------------- ---------------------- - --------- ------ ------- ------------ ----- ----------- ------------ - -- ------------------------------------------------- -- ----------------------------------- - ------------------------------------------------------------------ ------ ----- - ---- - ------ ------ - - ---
这样就完成了 Persistent Bottom Sheet Dialog 的实现。这种 Bottom Sheet Dialog 在页面滑动时,主要部分的内容可以滑动而底部的操作部分不被覆盖。效果十分出色。
总结
本文详细介绍了 Material Design 中 Bottom Sheet Dialog 的实现方式。根据使用场景和需求,可以实现不同类型的 Bottom Sheet Dialog,从而优化用户操作和交互体验。Bottom Sheet Dialog 既美观又实用,是 Material Design 中值得深入研究和应用的控件之一。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b12ca948841e9894d8287c