BottomSheet
Demo 代码 https://medium.com/@droidbyme/android-bottom-sheet-7e9cfcec6427
使用 BottomSheet、BottomSheetDialog、BottomSheetDialogFragment
BottomSheet使用流程
BottomSheet实现按钮在点击之后滑动布局.不联动也是可以的只要不设置它就可以了。
被联动的布局使用
app:layout_behavior="@string/bottom_sheet_behavior"
联动按钮使用属性
app:layout_behavior="@string/appbar_scrolling_view_behavior">
在初始化时被联动
// 设置绑定动作
// 控件和它绑定
var buttomSheetBehavior = BottomSheetBehavior.from(bottom_sheet_layout)
设置按钮了
也就是在现在监听按钮的时候才进行这个按钮的联动滑动
btnBottomSheet.setOnClickListener {
if (buttomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED)
buttomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
else
buttomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
}
设置在显示时不显示,不显示时显示。
设置监听器在它被拖动、滑动、切换时产生提示。
buttomSheetBehavior.setBottomSheetCallback(object : BottomSheetCallback() {
//这里是拖拽中的回调,根据slideOffset可以做一些动画
override fun onSlide(bottomSheet: View, slideOffset: Float) {
}
//这里是bottomSheet状态的改变
override fun onStateChanged(bottomSheet: View, newState: Int) {
when (newState) {
BottomSheetBehavior.STATE_EXPANDED -> {
Toast.makeText(this@MainActivity, "展开", Toast.LENGTH_LONG).show()
}
BottomSheetBehavior.STATE_COLLAPSED -> {
Toast.makeText(this@MainActivity, "关闭", Toast.LENGTH_LONG).show()
}
BottomSheetBehavior.STATE_DRAGGING -> {
Toast.makeText(this@MainActivity, "拖拽状态", Toast.LENGTH_LONG).show()
}
BottomSheetBehavior.STATE_HIDDEN -> {
Toast.makeText(this@MainActivity, "隐藏状态", Toast.LENGTH_LONG).show()
}
BottomSheetBehavior.STATE_SETTLING -> {
Toast.makeText(
this@MainActivity,
" 拖拽松开之后到达终点位置(collapsed or expanded)前的状态",
Toast.LENGTH_LONG
).show()
}
}
}
})
BottomSheetDialog使用流程
点击按钮之后弹出Dialog提示(布局界面有且准备好的)
设置按钮的监听器,点击之后直接弹出Dialog窗口。
/*
* Java函数式接口
* 弹窗提示
* */
btnBottomSheetDialog.setOnClickListener {
//使用布局加载器layoutInflater
val view = layoutInflater.inflate(R.layout.fragment_bottom_sheet, null)
//实例话BottomSheetDialog():用来实现弹出提示功能
val dialog = BottomSheetDialog(this)
dialog.setContentView(view)
dialog.show()
}
BottomSheetDialogFragment在当前界面加载Dialog碎片
/*
* 在当前界面加载碎片
* */
btnBottomSheetDialogFragment.setOnClickListener {
val bottomSHeetFragment = BottomSheetFragment()
bottomSHeetFragment.show(supportFragmentManager, bottomSHeetFragment.tag)
}
准备好要加载的碎片,它是要有bottom_sheet_dialog类型的界面