DrawerLayout侧边滑动效果(抽屉效果)
NavigationView(简单的菜单视图)可以用自定义fragment代替
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer">
<!-- 第一个位置 -->
<!-- 你的主界面内容,必须放置在Drawerlayout中的第一个位置
根据自己的需要来放置控件,
例如:LinearLayout布局或者RelativeLayout布局;
也可以是单个控件,
如 TextView等 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/content_layout">
</LinearLayout>
<!-- 第二个位置 -->
<!-- 用来放Drawerlayout中的内容,
这里使用NavigationView来实现类似Google pLay中的侧滑栏效果,
必须在build.gradle中添加compile 'com.android.support:design:22.2.0';
另外,如果不需要NavigationView效果,
也可以放置一个普通布局文件就是一个普通的侧滑栏了。
-->
<!--
注意:
如果使用NavigationView(其他控件也是一样)的特有属性,需要加上命名空间:
xmlns:app="http://schemas.android.com/apk/res-auto";
另外,一定要添加android:layout_gravity="left"属性。
-->
<!--
属性解析:
app:headerLayout: NavigationView中头部的head部分的布局,是自己实现的;
app:menu: 指定Nav中的Menu布局,就是自己写Menu中的按钮,要放在res/menu/文件夹下;
app:itemTextColor: 用来设置Nav中,menu item的颜色选择器。
还有一些属性: 和itemTextColor用法一样,指定一个颜色选择器,实现不同的颜色效果。
app:itemIconTint:
app:itemBackground:
-->
<android.support.design.widget.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:menu="@menu/drawer_item"
android:layout_gravity="left"
android:id="@+id/nav"/>
</android.support.v4.widget.DrawerLayout>
菜单文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item1"
android:title="item1"
android:icon="@mipmap/ic_launcher">
</item>
<group
android:id="@+id/goup1">
<item android:id="@+id/group1_item1"
android:title="gitem1">
</item>
</group>
</menu>
<!--
<item>标签的属性含义如下:
id:表示菜单项的资源ID
menuCategory:同种菜单项的种类。该属性可取4个值:container、system、secondary和alternative。通过menuCategroy属性可以控制菜单项的位置。例如将属性设为system,表示该菜单项是系统菜单,应放在其他种类菜单项的后面。
orderInCategor:同种类菜单的排列顺序。该属性需要设置一个整数值。例如menuCategory属性值都为system的3个菜单项(item1、item2和item3)。将这3个菜单项的orderInCategory属性值设为3、2、1,那么item3会显示在最前面,而item1会显示在最后面。
title:菜单项标题(菜单项显示的文本)
titleCondensed:菜单项的短标题。当菜单项标题太长时会显示该属性值
icon:菜单项图标资源ID
alphabeticShortcut:菜单项的字母快捷键
numericShortcut:菜单项的数字快捷键
checkable:表示菜单项是否带复选框。该属性可设计为true或false
checked:如果菜单项带复选框(checkable属性为true),该属性表示复选框默认状态是否被选中。可设置的值为true或false
visible:菜单项默认状态是否可视
enable:菜单项默认状态是否被激活
-->
<!--
<group>标签的属性含义如下:
id:表示菜单组的ID
menuCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组
orderInCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组
checkableBehavior:设置该组所有菜单项上显示的选择组件(CheckBox或Radio Button)。如果将该属性值设为all,显示CheckBox组件;如果设为single,显示Radio Button组件;如果设为none,显示正常的菜单项(不显示任何选择组件)。要注意的是,Android SDK官方文档在解释该属性时有一个笔误,原文是:
Whether the items are checkable. Valid values: none, all(exclusive/radiobuttons), single(non-exclusive/checkboxes).
相反了,正确应该是
all(non-exclusive/checkboxes),single(exclusive/radiobuttons).
visible:表示当前组中所有菜单项是否显示。该属性可设置的值是true或false
enable:表示当前组中所有菜单项是否被激活。该属性可设置的值是true或false
-->
使用进阶
1,抽象Activity用于继承
//将子activity的布局加载入content_layout
private void initContentView(int layoutResID) {
ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.content_layout);
viewGroup.removeAllViews();
parentLinearLayout = new LinearLayout(this);
parentLinearLayout.setOrientation(LinearLayout.VERTICAL);
viewGroup.addView(parentLinearLayout);
LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true);
}
2,使用fragment自定义右侧菜单
//DrawerLayout第二个布局(自定义fragment样式自由控制)
<LinearLayout
android:id="@+id/fr"
android:layout_width="190dp"
android:layout_height="match_parent"
android:layout_gravity="end">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="tw.com.knorr.fragment.RightMenuFragment"/>
</LinearLayout>