NavigationView是一个比较美观好用的控件,比如侧边栏的布局。
一个布局需要有顶部的头部空间和底部的菜单空间,因此需要分别编写两个布局文件。
菜单栏布局文件
filename:main_side_nav_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<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
<?xml version="1.0" encoding="utf-8"?>
<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;
}
});