如何禁止点击返回键时BottomSheetBehaviour自动消失?
BottomSheetBehavior禁止点击返回键自动关闭解决方案
触发原因
BottomSheetBehavior默认绑定了CoordinatorLayout的返回事件分发逻辑,当BottomSheet处于展开状态时,返回键事件会被系统消费,自动将BottomSheet切换到隐藏(STATE_HIDDEN)状态,对应视图变为GONE。
解决方案
方案1:禁用完全隐藏特性(无需拦截返回事件)
如果你的需求是仅禁止BottomSheet变为GONE,允许点击返回键折叠到指定的折叠高度,可以直接设置不可隐藏属性:
- XML布局中添加属性:
app:behavior_hideable="false" - 代码动态设置:
- Java写法:
bottomSheetBehavior.setHideable(false); - Kotlin写法:
bottomSheetBehavior.isHideable = false
- Java写法:
该属性设置为false后,BottomSheet无法进入STATE_HIDDEN状态,点击返回键只会折叠到STATE_COLLAPSED状态,不会变为GONE。
方案2:拦截返回键事件(完全禁止返回键操作BottomSheet)
如果需要完全屏蔽返回键对BottomSheet的控制,可以重写所属Activity的onBackPressed方法,拦截对应逻辑:
Java示例
@Override public void onBackPressed() { if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED || bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) { // 此处可添加自定义逻辑,无额外需求留空即可阻止默认关闭行为 return; } super.onBackPressed(); }
Kotlin示例
override fun onBackPressed() { if (bottomSheetBehavior.state == BottomSheetBehavior.STATE_EXPANDED || bottomSheetBehavior.state == BottomSheetBehavior.STATE_COLLAPSED) { // 自定义逻辑留空即可 return } super.onBackPressed() }
内容的提问来源于stack exchange,提问作者KODE
相关产品推荐
相关产品推荐

