Android Studio:在Bottom Sheet Fragment内点击按钮展开底部弹窗
实现Bottom Sheet Dialog点击按钮展开的方案
当然可以在onCreateView方法中设置点击事件来改变Bottom Sheet Dialog的状态,下面是具体的实现步骤和修改后的代码:
关键修改点
- 首先要初始化你的
expandBtn,避免空指针异常; - 在点击事件中获取
BottomSheetBehavior实例,通过它来切换Bottom Sheet的状态。
修改后的完整代码
public class RepliesToComment extends BottomSheetDialogFragment { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState); Window window = dialog.getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); dialog.getBehavior().setState(BottomSheetBehavior.STATE_COLLAPSED); return dialog; } ImageButton expandBtn; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_replies_to_comment, container, false); // 替换成你布局文件中按钮的实际ID expandBtn = view.findViewById(R.id.your_expand_button_id); expandBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 获取Bottom Sheet的行为控制实例 BottomSheetBehavior<View> behavior = ((BottomSheetDialog) getDialog()).getBehavior(); // 直接切换为展开状态 behavior.setState(BottomSheetBehavior.STATE_EXPANDED); // 如果需要支持「折叠/展开」切换,可替换为以下代码 /* if (behavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) { behavior.setState(BottomSheetBehavior.STATE_EXPANDED); } else if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } */ } }); return view; } }
说明
- 必须先通过
findViewById初始化按钮,否则会触发空指针异常; BottomSheetBehavior是控制Bottom Sheet状态的核心类,通过getDialog()拿到当前的BottomSheetDialog后,就能获取到这个实例;- 除了
STATE_COLLAPSED(折叠)和STATE_EXPANDED(展开),还可以使用STATE_HALF_EXPANDED(半展开)等其他状态,根据需求选择即可。
内容的提问来源于stack exchange,提问作者czrest
相关产品推荐
相关产品推荐

