DrawerLayout是谷歌官方提供的,用于实现侧滑菜单的一种抽屉式布局。
本文主要介绍DrawerLayout的简单使用。
详细代码:github.com/Baolvlv/LearnAndroid/tree/master/DrawerLayoutUsing
1.基本介绍
DrawerLayout,谷歌官方提供,实现侧滑菜单,抽屉布局
2.创建抽屉布局
将根布局改为DrawerLayout,设置命名空间,id与宽高
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_height="match_parent"
android:layout_width=“match_parent">
设置抽屉隐藏时的主内容布局,FrameLayout(运行时由fragment填充)
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
设置左侧抽屉式导航栏,ListView
设置id与宽高
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height=“match_parent"
设置layout_gravity为start,即从左向右滑出,如果为end,即为从右向左滑出
android:layout_gravity="start"
设置背景为米白色:
android:background=“#ffffcc"
设置为单选
android:choiceMode=“singleChoice"
通过设置分割线颜色透明,宽度为0,使分割线不可见
android:divider="@android:color/transparent"
android:dividerHeight=“0dp">
注意事项:
1.主内容视图是DrawerLayout的第一个子视图
2.主内容视图的宽度和高度匹配父视图
3.设置layout_gravity属性为start,不推荐使用left
4.抽屉视图宽度以dp为单位,不超过320dp
2.初始化抽屉式导航列表
初始化DrawerLayout和ListView,通过ArrayList储存list中的条目,通过Adapter传给ListView
mDrawerLayout= (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawList= (ListView) findViewById(R.id.left_drawer);
menuLists=newArrayList<>();
for(inti =0;i<5;i++){
menuLists.add("baolvlv"+i);
}
adapter=newArrayAdapter(this,
android.R.layout.simple_list_item_1,menuLists);
mDrawList.setAdapter(adapter);
新建contentFragment,继承自fragment,作为填充frameLayout的fragment,同时创建布局资源文件,重写onCreateView方法
publicViewonCreateView(LayoutInflater inflater,@NullableViewGroup container,@NullableBundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_content,container,false);
textView= (TextView) view.findViewById(R.id.text);
//获得参数,设置为textView的text的值
String text = getArguments().getString("text");
textView.setText(text);
returnview;
}
为侧边栏抽屉设置事件监听器,主Activity实现onItemClickListener
mDrawList.setOnItemClickListener(this);
重写onItemClick方法,执行点选后的操作
@Override
public voidonItemClick(AdapterView parent,View view, intposition, longid) {
//动态插入一个fragment到FrameLayout当中
Fragment contentFragment =newContentFragment();
//将点选的item作为参数,通过Bundle传递给fragment
Bundle args =newBundle();
args.putString("text",menuLists.get(position));
contentFragment.setArguments(args);
//替换当前fragment为新的fragment
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.content_frame,contentFragment).commit();
//点选之后关闭左侧的抽屉
mDrawerLayout.closeDrawer(mDrawList);
}