Android Material Design: NavigationView抽屉导航菜单
之前我写了一篇关于实现Android抽屉导航菜单栏的文章《基于Android官方DrawerLayout实现抽屉导航菜单》,文章链接地址:http:///zhangphil/article/details/48710453
在最新的Android Material Design中引入了NavigationView增强DrawerLayout。也可以认为是谷歌官方Android SDK对抽屉导航菜单栏进一步代码规范化。
测试的主Activity MainActivity.java :
package zhangphil.materialdesign;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private DrawerLayout drawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
// 关闭
drawerLayout.closeDrawers();
String t = menuItem.getTitle() + "";
Toast.makeText(getApplicationContext(), t, Toast.LENGTH_SHORT).show();
return true;
}
});
TextView text1 = (TextView) findViewById(android.R.id.text1);
text1.setText("头部1");
text1.setTextColor(Color.RED);
TextView text2 = (TextView) findViewById(android.R.id.text2);
text2.setText("头部2");
text2.setTextColor(Color.BLUE);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 由Button也可以打开
// 从左边打开
drawerLayout.openDrawer(GravityCompat.START);
}
});
}
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// if (item.getItemId() == android.R.id.home){
//
// //打开
// drawerLayout.openDrawer(GravityCompat.START);
// }
//
// return super.onOptionsItemSelected(item);
// }
}
MainActivity.java需要的布局文件:activity_main.xml文件:
<android.support.v4.widget.DrawerLayout xmlns:android="http:///apk/res/android"
xmlns:app="http:///apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="打开 " />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="主界面"
android:textSize="50sp" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="left"
android:fitsSystemWindows="true"
app:headerLayout="@android:layout/simple_list_item_2"
app:itemIconTint="#ff5252"
app:itemTextColor="#42a5f5"
app:menu="@menu/main" >
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
activity_main.xml用到的的菜单布局文件main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http:///apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<item
android:checkableBehavior="single"
android:title="第一组菜单">
<item
android:id="@+id/open"
android:icon="@drawable/ic_launcher"
android:title="打开"/>
<item
android:id="@+id/close"
android:icon="@drawable/ic_launcher"
android:title="关闭"/>
<item
android:id="@+id/create"
android:icon="@drawable/ic_launcher"
android:title="新建"/>
</item>
<item android:title="第二组菜单">
<menu>
<item
android:id="@+id/exit"
android:icon="@drawable/ic_launcher"
android:title="退出"/>
<item
android:id="@+id/about"
android:icon="@drawable/ic_launcher"
android:title="关于"/>
</menu>
</item>
</menu>
(1)app:headerLayout表示要在弹出的抽屉导航菜单的顶部(头部)加载的布局。
(2)app:itemIconTint设置抽屉导航菜单中图标icon的颜色。
(3)app:itemTextColor设置抽屉导航菜单中的字体颜色。
(4)app:menu设置加载的菜单布局文件。