首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BottomSheetDialogFragment -允许滚动子项

BottomSheetDialogFragment -允许滚动子项
EN

Stack Overflow用户
提问于 2016-12-01 15:19:48
回答 10查看 16.3K关注 0票数 24

我有一台带RecyclerViewBottomSheetDialogFragment。问题是,我想禁用BottomSheetDialogFragment的拖动关闭功能,只要RecyclerView没有向上滚动(目前我不能滚动我的RecyclerView,因为尝试总是关闭BottomSheetDialogFragment)。有什么办法可以做到这一点吗?

EN

回答 10

Stack Overflow用户

发布于 2019-02-20 08:40:38

通过这种方式可以解决BottomSheetDialog中的RecyclerView滚动问题。

来自:https://android.jlelse.eu/recyclerview-within-nestedscrollview-scrolling-issue-3180b5ad2542

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<android.support.v4.widget.NestedScrollView
        android:id="@+id/nestedScrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</LinearLayout>
票数 11
EN

Stack Overflow用户

发布于 2020-09-24 20:08:22

在您在onCreateView中扩展RecyclerViewFragment中尝试此方法

代码语言:javascript
复制
recyclerView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.getParent().requestDisallowInterceptTouchEvent(true);
        v.onTouchEvent(event);
        return true;
    }
});
票数 5
EN

Stack Overflow用户

发布于 2017-08-17 15:21:05

只需将其视为BottomSheetDialog,并简单地禁用其在触摸时的拖动或滑动。

创建BottomSheetDialog时,它会自动将您的布局包装在CoordinatorLayout 中,所以如果您想从视图中获取行为,请调用

最终视图行为=BottomSheetBehavior.from(( BottomSheetBehavior ) view.getParent());

然后通过这种行为,你可以做你需要做的事情。

代码语言:javascript
复制
final BottomSheetBehavior behavior = BottomSheetBehavior.from((View) view.getParent());
    behavior.setHideable(false);
    behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {

        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    });

这对me.Hope很有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40904724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档