DrawerLayout使用中的一些小问题

DrawerLayout使用中的一些小问题

drawerlayout的用法,网上有好多讲解的,可以看看官方侧滑菜单DrawerLayout的使用

还有官网API

现对在使用的过程中,自己遇到的一些小问题做个总结。

1.侧边栏布局中必须声明layout_gravity=”start/left”


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/dl"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

        
        <TextView
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:layout_gravity="bottom"
            android:background="#aa6373bc"
            android:clickable="true"
            android:gravity="center"
            android:text="drawerlayou测试" />

    android.support.v4.widget.DrawerLayout>

RelativeLayout>

2.点击事件穿透

官方的例子中侧边栏用的是listview,会自动获取焦点,而自己布局中如果没有获取焦点,则点击事件就会传递到主布局。需要在侧边栏布局属性中加入android:clickable="true"

3.关闭DrawerLayout的手势滑动

有时候在滑动侧边栏,但只滑动了一小段距离又停止却并没有展开。用户体验不是很好,可以直接在关闭状态下禁止滑动,展开状态不但可以点击主页面空白区域关闭,也可以滑动关闭,这样操作起来体验好很多

开始加载后通过设置模式来设置是不可以滑动:

//关闭手势滑动
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

ps:关闭手势滑动后需要在其他地方调用drawerLayout.openDrawer(Gravity.START);方法打开侧边栏

然后在滑动监听事件中在展开状态下打开滑动,可以滑动关闭

drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
    @Override
    public void onDrawerSlide(View drawerView, float slideOffset) {
    }
    @Override
    public void onDrawerOpened(View drawerView) {
        //展开侧边栏时打开手势滑动
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
    }
    @Override
    public void onDrawerClosed(View drawerView) {
        //合起侧边栏时关闭手势滑动
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    }
    @Override
    public void onDrawerStateChanged(int newState) {
    }
});

ps:setDrawerListener方法过时,可用addDrawerListener代替,一样的用法。

你可能感兴趣的:(Android)