Mako Shan

Mako 是一名密码朋克爱好者
这里是我记录生活和成长的地方

联系我的微信号
👏欢迎一起交流学习

如何禁止 DrawerLayout 来将触摸事件传递给基础视图

问题描述:

在打开Drawer抽屉的情况下,点击抽屉界面,抽屉后面的的基础视图也会捕捉到点击事件。今天搞了一天终于解决了。

解决方法 1:

重写基础视图的点击事件:
例如

// 重写监听事件
        lv.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Activity act = getActivity();
                if (act instanceof MainActivity) {
                    final boolean canScroll = ((MainActivity) act).canScroll();
                    Log.e("scroll", "" + canScroll);
                    if (!canScroll) {
                        event.setAction(MotionEvent.ACTION_CANCEL);
                        return false;
                    } else {
                        return v.onTouchEvent(event);
                    }
                }
                return false;
            }
        });
在基类中获取抽屉的状态
    // listview是否可以滑动
    public boolean canScroll() {
        return isCanAccessFocus;
    }
private boolean isCanAccessFocus=true;//抽屉是否打开,打开就将设置为false
@Override
            public void onDrawerOpened(View arg0) {
                System.out.println("抽屉打开");
                isCanAccessFocus=false;
            }
            @Override
            public void onDrawerClosed(View arg0) {
                System.out.println("抽屉关闭");
                isCanAccessFocus=true;
            }
drawerLayout.setDrawerListener(new DrawerListener() {
            @Override
            public void onDrawerStateChanged(int arg0) {
                if (arg0 == 2) {
                    System.out.println(arg0 + "抽屉打开");
                } else if (arg0 == 0) {
                    
                    System.out.println(arg0 + "抽屉关闭");
                }
            }
            @Override
            public void onDrawerSlide(View arg0, float arg1) {
            };
            @Override
            public void onDrawerOpened(View arg0) {
                isCanAccessFocus = false;
            }
            @Override
            public void onDrawerClosed(View arg0) {
                isCanAccessFocus = true;
            }
        });

解决方法 2:

在抽屉里的内容-上设置为 true 可点击它就会消耗的触摸。

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <FrameLayout
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
 
    <FrameLayout
        android:id="@+id/sidebar_container"
        android:layout_width="300dp"
        android:clickable="true"
        android:layout_height="match_parent"
        android:layout_gravity="left"/>
 
</android.support.v4.widget.DrawerLayout>
1
自定义ListView中的分割线
目录