📅  最后修改于: 2023-12-03 15:02:32.357000             🧑  作者: Mango
BottomSheet 是一种 Android 中的交互式界面元素,可向用户表示有关当前应用程序上下文的信息,可以在屏幕底部使用,还可以滑动展开或折叠。BottomSheet 可以是“持久性”的,也可以是“模态”的(即只有在用户与其交互时才会展开)。在本文中,我们将介绍如何使用 Kotlin 在 Android 应用程序中实现 BottomSheet。
本文所用的代码示例基于 Android Studio 的最新版本。
要在 Android 应用程序中使用 BottomSheet,需要在应用程序的 build.gradle 文件中添加以下依赖项:
dependencies {
implementation 'com.google.android.material:material:1.5.0-alpha01'
}
这会将 Material 设计库添加到项目中,其中包括 BottomSheet 的支持。
要在应用程序中使用 BottomSheet,您需要以下文件:
我们的布局文件将简单包含一个 RecyclerView 和一个 FloatingActionButton,无需进行任何额外的设置或使用样式。在这个布局文件中,我们将添加一个视图来触发 BottomSheet:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_add_note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_add_white_24dp" />
<TextView
android:id="@+id/tv_sheet_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:padding="16dp"
android:text="Bottom Sheet Example"
android:textColor="@color/white"
android:textSize="20sp" />
<View
android:id="@+id/view_separator"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/tv_sheet_title"
android:background="#DDDDDD" />
<TextView
android:id="@+id/tv_sheet_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/view_separator"
android:padding="16dp"
android:text="This is the content of the Bottom Sheet" />
</RelativeLayout>
我们将创建一个名为 NotesBottomSheetDialog 的 BottomSheetDialogFragment 类。我们需要覆盖 onCreateDialog() 方法并返回一个 BottomSheetDialog 实例,该 BottomSheetDialog 使用我们的布局文件:
class NotesBottomSheetDialog : BottomSheetDialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = layoutInflater.inflate(R.layout.bottom_sheet_notes, null)
val dialog = BottomSheetDialog(requireContext(), theme)
dialog.setContentView(view)
return dialog
}
companion object {
val TAG: String = NotesBottomSheetDialog::class.java.simpleName
fun newInstance(): NotesBottomSheetDialog =
NotesBottomSheetDialog()
}
}
要触发 BottomSheet,您只需按下 FloatingActionButton:
fab_add_note.setOnClickListener {
NotesBottomSheetDialog.newInstance().show(parentFragmentManager, NotesBottomSheetDialog.TAG)
}
完成了!您现在可以在应用程序中使用具有基本信息的 BottomSheet。
要使用 RecyclerView 显示数据,我们需要一个适配器。 下面是我们的 NoteAdapter 类:
class NoteAdapter(val notes: List<String>) : RecyclerView.Adapter<NoteViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_note, parent, false)
return NoteViewHolder(view)
}
override fun getItemCount(): Int = notes.size
override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
holder.bind(notes[position])
}
}
class NoteViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(text: String) {
itemView.tv_note_text.text = text
}
}
此适配器将在我们的 BottomSheet 布局中显示每个便笺。
我们需要将 RecyclerView 添加到布局文件中,并将 adapter 设置为 NoteAdapter:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/view_separator"
android:clipToPadding="false"
android:padding="16dp"
android:scrollbars="vertical"/>
我们需要在 onCreateDialog() 方法中查找 RecyclerView 并将其与 NoteAdapter 搭配使用:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = layoutInflater.inflate(R.layout.bottom_sheet_notes, null)
val dialog = BottomSheetDialog(requireContext(), theme)
dialog.setContentView(view)
val notes = listOf("Note 1", "Note 2", "Note 3")
val adapter = NoteAdapter(notes)
view.recyclerView.adapter = adapter
return dialog
}
好的,现在您的 BottomSheet 将使用 RecyclerView 显示数据。
在本文中,您已经学会了如何使用 Kotlin 在 Android 应用程序中使用 BottomSheet,包括如何:
示例代码可在以下 GitHub 存储库中找到:
https://github.com/Lingara/Android-Kotlin-Bottom-Sheet-Example