2.Android support design NavigationView

来源:互联网 发布:指纹识别算法 源代码 编辑:程序博客网 时间:2024/06/06 03:14

2.Android support design NavigationView

  • Android support design NavigationView
    • NavigationView介绍
    • gradle配置
    • 布局设置
    • NavigationView事件处理
    • 效果图


在没有Android Design Support Library的时候,侧滑(一般在左侧)菜单的功能的实现困扰了不少小伙伴们。自定义一个这样功能的的View,免不了各种大小问题,实现问题,时间问题;找第三方库,可能有好的,但是各种厂商系统的兼容问题也会让人头疼。

Android Design Support Library的出现带来了NavigationView组件,并且向下兼容到Android2.1,可以方便地创建导航抽屉。


gradle配置

compile 'com.android.support:design:23.0.1' 或者更高版本

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:23.0.1'    compile 'com.android.support:design:23.0.1'}

布局设置

特别注意:一般在使用NavigationView的时候,都是需要DrawerLayout作为父试图。DrawerLayout肯定还有其他组件或包含组件的Layout存在,一定要注意!请将NavigationView放置在DrawerLayout底部(当然不一定要最底部),这样就显示在其他组件或Layout的上层,只有这样NavigationView才能接收到事件,才能再侧滑收回菜单。 不然事件被其他组件或者Layout拦截,就不能侧滑收回菜单了。

natigation_view_layout.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/drawerLayout"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:fitsSystemWindows="true"    android:orientation="vertical">    <android.support.design.widget.CoordinatorLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:fitsSystemWindows="true"        tools:context=".MainActivity">        <android.support.design.widget.AppBarLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:theme="@style/AppTheme.AppBarOverlay">            <android.support.v7.widget.Toolbar                android:id="@+id/toolbar"                android:layout_width="match_parent"                android:layout_height="?attr/actionBarSize"                android:background="?attr/colorPrimary"                android:theme="@style/AppTheme.AppBarOverlay"                app:popupTheme="@style/AppTheme.PopupOverlay" />        </android.support.design.widget.AppBarLayout>        <include layout="@layout/menu" />    </android.support.design.widget.CoordinatorLayout>    <android.support.design.widget.NavigationView        android:id="@+id/navigation"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:layout_gravity="start"        app:headerLayout="@layout/navigation_header"        app:menu="@menu/menu_navigation">    </android.support.design.widget.NavigationView></android.support.v4.widget.DrawerLayout>

navigation_header.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@mipmap/navigation_header_bg"    android:orientation="vertical"/>

menu_navigation.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:id="@+id/navigation_sub_setting"        android:icon="@mipmap/icon_clinic_manager"        android:title="设置" />    <item        android:id="@+id/navigation_subheader"        android:title="CaMnter">        <menu>            <item                android:id="@+id/navigation_sub_plan"                android:icon="@mipmap/icon_patient_list_book"                android:title="计划" />            <item                android:id="@+id/navigation_sub_share"                android:icon="@mipmap/icon_share"                android:title="分享" />            <item                android:id="@+id/navigation_sub_time"                android:icon="@mipmap/icon_time"                android:title="时钟" />            <item                android:id="@+id/navigation_sub_clear"                android:icon="@mipmap/icon_schedule_clean"                android:title="清空缓存" />        </menu>    </item></menu>

收起抽屉
DrawerLayout.closeDrawer(View drawerView)

设置NavigationView选项监听事件
NavigationView.setNavigationItemSelectedListener(NavigationView.OnNavigationItemSelectedListener listener)

    private DrawerLayout drawerLayout;    private NavigationView navigationView;    private NavigationView.OnNavigationItemSelectedListener navigationViewListener = new NavigationView.OnNavigationItemSelectedListener() {        @Override        public boolean onNavigationItemSelected(MenuItem menuItem) {            /**             *  NavigationView选项事件处理             *             *  id 对应 NavigationView中定义的menu itemid             */            switch (menuItem.getItemId()) {                case R.id.navigation_sub_setting:                    break;                case R.id.navigation_subheader:                    break;                case R.id.navigation_sub_plan:                    break;                case R.id.navigation_sub_share:                    break;                case R.id.navigation_sub_time:                    break;                case R.id.navigation_sub_clear:                    break;            }            // 收起            drawerLayout.closeDrawer(navigationView);            return false;        }    };    private void settingNavigationView(){        // 添加item的监听事件        this.navigationView.setNavigationItemSelectedListener(this.navigationViewListener);    }

效果图

navigation

0 0
原创粉丝点击