Android开发 - NavigationView的使用以及监听事件

NavigationView是一个比较美观好用的控件,比如侧边栏的布局。
一个布局需要有顶部的头部空间和底部的菜单空间,因此需要分别编写两个布局文件。
菜单栏布局文件

filename:main_side_nav_menu.xml


<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item android:id="@+id/MainSideMenuHome"
            android:icon="@drawable/main_home_empty"
            android:title="Home"/>
        <item android:id="@+id/MainSideMenuDownload"
            android:icon="@drawable/main_top_download"
            android:title="Download"/>
    group>
menu>

头部布局文件,这里是我稍微写的一个

filename:main_side_nav_header.xml


<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="140dp"
    android:paddingTop="15dp"
    android:paddingLeft="15dp"
    android:paddingBottom="10dp"
    android:background="@color/deeppink"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <de.hdodenhof.circleimageview.CircleImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:id="@+id/MainSideMenuHeaderImage"

            android:layout_gravity="left"
            android:src="@drawable/test_image"/>
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/main_side_nav_header_money"
            android:id="@+id/MainSideMenuHeaderMoney"/>
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/main_side_nav_header_scanqr"
            android:id="@+id/MainSideMenuHeaderScanQR"/>
    LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/MainSideMenuHeaderMoneyInfo"
        android:layout_alignParentBottom="true"
        android:text="B币:0.0    硬币:488.3"
        android:textSize="13sp"
        android:textColor="@color/lightgray"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/MainSideMenuHeaderUserName"
        android:layout_above="@+id/MainSideMenuHeaderMoneyInfo"
        android:text="蜜桃不好吃"
        android:textSize="16sp"
        android:textColor="#FFF"/>


RelativeLayout>

在activity_main.xml的末尾直接添加控件就好了,在此通过app:menu和app:headerLayout分别设置菜单栏和头部布局文件。

<android.support.v4.widget.DrawerLayout>
......
    <android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/main_side_nav_menu"
        app:headerLayout="@layout/main_side_nav_header"
        android:id="@+id/MainSideMenu"
        >

    android.support.design.widget.NavigationView>
android.support.v4.widget.DrawerLayout>

最后修改一下MainActivity.java文件,在onCreate()方法最后添加如下代码,设置一下监听事件,即点击自动关上测边框。应该可以在这里通过MenuItem对菜单栏的按钮监听。

MainSideMenuNavigationView.setCheckedItem(R.id.MainSideMenuHome);
             MainSideMenuNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                MainSideMenuDrawLayout.closeDrawers();
                return true;
            }
        });

你可能感兴趣的:(Android,android,android,studio,移动开发,安卓,app)