当我尝试滚动其中的列表时,如何防止导航抽屉意外关闭?

问题描述 投票:0回答:1

我在我的activty和导航抽屉中使用android.support.v4.widget.DrawerLayout占据屏幕宽度的3/4。抽屉有一个循环视图,使用一些适配器填充。现在的问题是,当我尝试滚动循环视图时,有时DrawerLayout会窃取事件并关闭抽屉而不是滚动循环视图。这使抽屉意外接近。如何防止这种情况发生。理想情况下,只要在recycleview上发生,我就不希望DrawerLayout响应触摸事件。

activity.xml -

<RelativeLayout
    android:id="@+id/retail_container"
    android:layout_width="match_parent"

    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/contentFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        style="@style/DrawerArrowStyle"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#2196F3"
        android:minHeight="?attr/actionBarSize"
        app:contentInsetEnd="0dp"
        app:contentInsetStart="0dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"></android.support.v7.widget.Toolbar>

    <FrameLayout
        android:id="@+id/chat_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>

    <ProgressBar
        android:id="@+id/refreshingProgressBar"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="3dp"
        android:layout_marginBottom="0dp"
        android:layout_marginTop="?attr/actionBarSize"
        android:background="#FF000000"
        android:contentDescription="Loading..."
        android:indeterminateDrawable="@drawable/progress_indeterminate_horizontal"
        android:indeterminateOnly="true"
        android:overScrollMode="never"
        android:paddingBottom="0dp"
        android:visibility="gone" />


</RelativeLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/new_wishlist_drawer"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    android:background="@android:color/white">

</android.support.design.widget.NavigationView>

android android-navigation-drawer
1个回答
0
投票

今天我在努力解决这个问题,并提出了这个解决方案:

public class LockableDrawerLayout extends DrawerLayout {
private long earliestEvent = -1;

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

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

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

public void lockUntil(long delay) {
    this.earliestEvent = System.currentTimeMillis() + delay;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (System.currentTimeMillis() > earliestEvent) {
        return super.onInterceptTouchEvent(ev);
    } else {
        return false;
    }
}

}

从具有滚动的视图,调用lockUntil和drawerlayout将在给定的延迟时被锁定。

© www.soinside.com 2019 - 2024. All rights reserved.