gpt4 book ai didi

android - DrawerLayout 上的水平回收 View

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:10 25 4
gpt4 key购买 nike

这是我的 NavigationView 布局

 <android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/meny" />

headerLayout 有一个水平的 RecyclerView,其中有一些用户可以在上面滚动的项目。

我的问题是每当我想在 RecyclerView 中滚动时,drawerLayout 就会关闭。

有什么方法可以在 Drawerlayout 上支持水平 RecyclerView 吗?

最佳答案

当用户在 RecyclerView 上滚动时,您应该禁用拦截 DrawerLayout 上的触摸事件,因此创建一个自定义 DrawerLayout 如下:

public class DrawerLayoutHorizontalSupport extends DrawerLayout {

private RecyclerView mRecyclerView;
private NavigationView mNavigationView;

public DrawerLayoutHorizontalSupport(Context context) {
super(context);
}

public DrawerLayoutHorizontalSupport(Context context, AttributeSet attrs) {
super(context, attrs);
}

public DrawerLayoutHorizontalSupport(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isInside(ev) && isDrawerOpen(mNavigationView))
return false;
return super.onInterceptTouchEvent(ev);
}

private boolean isInside(MotionEvent ev) { //check whether user touch recylerView or not
return ev.getX() >= mRecyclerView.getLeft() && ev.getX() <= mRecyclerView.getRight() &&
ev.getY() >= mRecyclerView.getTop() && ev.getY() <= mRecyclerView.getBottom();
}

public void set(NavigationView navigationView, RecyclerView recyclerView) {
mRecyclerView = recyclerView;
mNavigationView = navigationView;
}


}

在展开您的布局后,只需调用 set 并传递您的 NavigationViewRecyclerView

onInterceptTouchEvent 中,我检查抽屉是否打开以及用户在 RecyclerView 中触摸,然后我返回 false,所以 DrawerLayout 什么都不做

关于android - DrawerLayout 上的水平回收 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32134373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com