make main content area active in DrawerLayout

后端 未结 2 966
情书的邮戳
情书的邮戳 2020-12-06 08:22

How to make active main content area, while drawer is open. Currently, if main content area is clicked, drawer will be closed then touch event will be dropped, I want to cat

2条回答
  •  佛祖请我去吃肉
    2020-12-06 09:16

    You need to create custom DrawerLayout and @overide onInterceptTouchEvent. Then you can create some method for registering drawer views (like setDrawerViewWithoutIntercepting), for which will be possible to use (click) main content, when are open. You should call this method in your activity/fragment, where is this DrawerLayout used.

    OnInterceptTouchEvent will be returning false just in case registered drawer view is opened and touches are outside of drawer view area. This means all functionality remains the same (like closing drawer view using swiping, etc.)

    This is just example which should be improved, so I hope it will help you.

    private View currentDrawerView;
    
    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        boolean result = super.onInterceptTouchEvent(event);
    
        if (currentDrawerView != null && isDrawerOpen(currentDrawerView)) {
            DrawerLayout.LayoutParams layoutParams = (DrawerLayout.LayoutParams) currentDrawerView.getLayoutParams();
    
            if (layoutParams.gravity == Gravity.RIGHT) {
                if (event.getX() < currentDrawerView.getX()) {
                    result = false;
                }
            }
            else if (layoutParams.gravity == Gravity.LEFT) {
                if (event.getX() > currentDrawerView.getX() + currentDrawerView.getWidth()) {
                    result = false;
                }
            }
            // ......
    
        };
        return result;
    }
    
    public void setDrawerViewWithoutIntercepting(View view) {
        this.currentDrawerView = view;
    }
    

提交回复
热议问题