Android侧边滑动菜单

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>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值