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
代替,一样的用法。