android – 如何禁用BottomSheetDialogFragment拖动

如何禁用BottomSheetDialogFragment手指拖动?

我看到了类似的问题,但它们都是关于BottomSheet而不是BottomSheetDialogFragment.

最佳答案
创建MyActivity如下:


    public class MyActivity extends AppCompatActivity {

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);

            new MyBottomSheetFragment().show(getSupportFragmentManager(),"tag");
        }

        public static class MyBottomSheetFragment extends BottomSheetDialogFragment {

            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
                bottomSheetDialog.setContentView(R.layout.sample);

                try {
                    Field mBehaviorField = bottomSheetDialog.getClass().getDeclaredField("mBehavior");
                    mBehaviorField.setAccessible(true);
                    final BottomSheetBehavior behavior = (BottomSheetBehavior) mBehaviorField.get(bottomSheetDialog);
                    behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
                        @Override
                        public void onStateChanged(@NonNull View bottomSheet,int newState) {
                            if (newState == BottomSheetBehavior.STATE_DRAGGING) {
                                behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                            }
                        }

                        @Override
                        public void onSlide(@NonNull View bottomSheet,float slideOffset) {
                        }
                    });
                } catch (NoSuchFieldException e) {
                    e.printstacktrace();
                } catch (illegalaccessexception e) {
                    e.printstacktrace();
                }

                return bottomSheetDialog;
            }
        }
    }

R.layout.sample是一个简单的布局:

你会得到以下输出

解决方案的一部分是从this答案中借来的.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...