咱們作抽屜菜單的時候,左邊滑出來的那一部分的佈局都是由咱們本身來定義的,本身寫的話,花點時間也能作出來好看的側拉菜單,但老是要耗費時間,因而Google在5.0以後推出了NavitationView,就是咱們左邊滑出來的那個菜單。這個菜單總體上分爲兩部分,上面一部分叫作HeaderLayout,下面的那些點擊項都是menu,這樣的效果若是咱們要本身寫確定也能寫出來,可是沒有必要,既然Google提供了這個控件,那咱們就來看看這個控件要怎麼用吧。android
首先全部的東西都放在一個DrawerLayout中app
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_home" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.iblood.ui.HomeActivity"> <!--主佈局--> <include layout="@layout/layout_zhu"/> <!--側滑佈局--> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity = "left" app:headerLayout="@layout/cehua_head" app:menu="@menu/menu"> <Button android:text="申請成爲寄養家庭" android:background="#e59707" android:paddingLeft="40px" android:paddingRight="40px" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout>
首先,根佈局就是DrawerLayout,在根佈局以後又主要分爲三大塊,第一塊就是咱們主界面的內容,第二塊是左邊拉出來的佈局,第三塊是右邊拉出來的佈局(不須要右邊側拉就不用寫,這樣的話整個佈局就只分爲兩大塊),那麼系統怎麼知道咱們這個佈局是主佈局仍是側拉菜單的佈局?請注意左邊側拉菜單佈局android:layout_gravity="left"這個屬性和右邊菜單佈局的android:layout_gravity="right"這個屬性,哈哈,這下應該明白了吧,系統經過layout_gravity屬性的值來判斷這個佈局是左邊菜單的佈局仍是右邊菜單的佈局,若是沒有這個屬性,那不用說,確定是主界面的佈局。ide
app:headerLayout="@layout/header_layout"表示引用一個頭佈局文件佈局
app:menu="@menu/main"表示引用一個menu做爲下面的點擊項ui
Button 是下面的一個切換按鈕this
頭佈局文件spa
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20px" android:id="@+id/cehua_tou" android:orientation="horizontal"> <ImageView android:id="@+id/iv" android:layout_margin="10px" android:layout_gravity="center" android:layout_width="80px" android:layout_height="80px" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher"/> <LinearLayout android:orientation="vertical" android:layout_gravity="center" android:layout_width="0px" android:layout_weight="1" android:layout_height="wrap_content"> <TextView android:text="aaa" android:id="@+id/cehua_name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="aaa" android:id="@+id/cehua_dianhua" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ImageView android:src="@drawable/enter" android:layout_width="30px" android:layout_height="30px" android:layout_gravity="center"/> </LinearLayout>
menu文件xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <group android:id="@+id/a" > <item android:id="@+id/cehua_xiaoxi" android:icon="@drawable/messages" android:title="消息"/> <item android:id="@+id/cehua_chongwu" android:icon="@drawable/pet" android:title="寵物"/> </group> <group android:id="@+id/b"> <item android:id="@+id/cehua_dingdan" android:icon="@drawable/order_details" android:title="訂單"/> <item android:id="@+id/cehua_qianbao" android:icon="@drawable/collection_account" android:title="錢包"/> <item android:id="@+id/cehua_xuzhi" android:icon="@drawable/about" android:title="須知"/> </group> <group android:id="@+id/c"> <item android:id="@+id/cehua_shezhi" android:icon="@drawable/setting" android:title="設置"/> </group> <group android:id="@+id/d"> <item android:title=""/> </group> </menu>
在佈局文件中添加app:itemIconTint="@color/blue"屬性 改變背景顏色事件
代碼中navigationView.setItemIconTintList(null); 顯示本來顏色ip
其實不用<group>標籤也能夠,可是加上它在給個id的話會分隔item顯得逼格高一些
1.app:itemBackground="@color/colorAccent"設置每個item的背景顏色
2.app:itemTextColor=""設置item的背景顏色
頭佈局點擊事件
//側滑頭佈局 View headerView = navView.getHeaderView(0); View cehua_tou = headerView.findViewById(R.id.cehua_tou); cehua_tou.setOnClickListener(this);
item點擊事件
//側滑item點擊事件 navView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { //容許條目點擊 item.setCheckable(true); switch (item.getItemId()){ case R.id.cehua_xiaoxi: Toast.makeText(HomeActivity.this, "11111111111111", Toast.LENGTH_SHORT).show(); break; case R.id.cehua_chongwu: Toast.makeText(HomeActivity.this, "22222222222222", Toast.LENGTH_SHORT).show(); break; } return false; } });