Android最简单的侧边栏实现控件:DrawerLayout

Android最简单的侧边栏实现控件:DrawerLayout_第1张图片Android最简单的侧边栏实现控件:DrawerLayout_第2张图片

主要是控件的使用:


    
    
        
            
	        
    

    
        
        
        
        
    
        
    
        
        
        
	       
    

OK,搞定。可以去加载它来用了,直接手势侧边滑动可用,需要说明的是侧边栏背景不设置就是透明背景,不过整体会变灰暗,侧边栏内容字体是白色的话还挺酷炫的。

 

是不是漏了什么?对的,还可以通过代码控制打开和关闭,

//先要通过findViewById获得这个侧边栏控件mDrawerLayout,然后可以通过事件监听打开和关闭抽屉
//打开抽屉
mDrawerLayout.openDrawer(Gravity.LEFT);//同理,打开右边就是Gravity.RIGHT
//关闭抽屉
mDrawerLayout.closeDrawers();//关闭所有,其实两边也不会同时出来,所以关闭所有即可关闭任意一边
//当然你也可以严谨一点,非要关闭一边
//closeDrawer(Gravity.LEFT);//or Gravity.RIGHT

以及屏蔽手势:

//屏蔽手势操作,解锁参数DrawerLayout.LOCK_MODE_UNLOCKED
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
//如果只想屏蔽其中一边:
//mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,Gravity.LEFT);//或者Gravity.RIGHT

拓展:(转)全屏手势滑出。不过这个方法本人亲测有两个小bug:

1、跟另一侧出来后的滑回有冲突;

2、长按不滑动也会出来,和其他滑动操作冲突。

/**
     * 重新设置DrawerLayout控件侧滑距离
     * @param activity
     * @param drawerLayout
     * @param displayWidthPercentage    传1表示全屏滑动
     */
    private void setDrawerLeftEdgeSize (Activity activity, DrawerLayout drawerLayout, float displayWidthPercentage,boolean isSetLeft) {
        if (activity == null || drawerLayout == null)
            return;
        try {
            // 找到 ViewDragHelper 并设置 Accessible 为true
            Field leftDraggerField =
                    drawerLayout.getClass().getDeclaredField(isSetLeft?"mLeftDragger":"mRightDragger");
            leftDraggerField.setAccessible(true);
            ViewDragHelper leftDragger = (ViewDragHelper) leftDraggerField.get(drawerLayout);

            // 找到 edgeSizeField 并设置 Accessible 为true
            Field edgeSizeField = leftDragger.getClass().getDeclaredField("mEdgeSize");
            edgeSizeField.setAccessible(true);
            int edgeSize = edgeSizeField.getInt(leftDragger);

            // 设置新的边缘大小
            Point displaySize = new Point();
            activity.getWindowManager().getDefaultDisplay().getSize(displaySize);
            edgeSizeField.setInt(leftDragger, Math.max(edgeSize, (int) (displaySize.x *
                    displayWidthPercentage)));
        } catch (NoSuchFieldException e) {
        } catch (IllegalArgumentException e) {
        } catch (IllegalAccessException e) {
        }
    }


你可能感兴趣的:(Android)