DrawerLayout使用中的一些小问题

DrawerLayout使用中的一些小问题

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

还有官网API

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

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

<?xml version="1.0" encoding="utf-8"?>
<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" />

        <!-- 侧边栏布局,可以是任何view,必须要声明抽屉的方向 layout_gravity 属性,一般用layout包裹,
        填充listview的时候会自动获取焦点,点击时事件不会传递,而填充其他布局的时候点击事件会传递到主布局,
        所以要声明属性 clickable=true
            -->
        <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代替,一样的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值