转载请标注来源:KingJA码家的博客
Toolbar的使命就是为了替代ActionBar。
compile ‘com.android.support:appcompat-v7:23.1.1’
步骤:
1,因为此范例只使用 Toolbar,所以我们要将让原本的 ActionBar 隐藏起来。
2,在XML布局文件中加入Toolbar
"@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
3,在代码中使用。
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
常用设置
//显示返回按钮
getSupportActionBar().setHomeButtonEnabled(true);
//设置返回按钮可点击
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//设置返回按钮图标
toolbar.setNavigationIcon(R.mipmap.menu);
//去掉原标题
getSupportActionBar().setDisplayShowTitleEnabled(false);
//设置LOGO
toolbar.setLogo(R.mipmap.logo);
//设置主标题
toolbar.setTitle("Title");
//设置副标题
toolbar.setSubtitle("SubTitle");
4,加入菜单项。
"1.0" encoding="utf-8"?>
5,触发菜单项点击事件。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.location:
Toast.makeText(this,"Location",Toast.LENGTH_SHORT).show();
break;
case R.id.listview:
Toast.makeText(this,"ListView",Toast.LENGTH_SHORT).show();
break;
case R.id.gridview:
Toast.makeText(this,"GridView",Toast.LENGTH_SHORT).show();
break;
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
在Material Design中,Navigation drawer导航抽屉,被设计用于应用导航,提供了一种通用的导航方式,体现了设计的一致性。而NavigationView的典型用途就是配合之前v4包的DrawerLayout,作为其中的Drawer部分,即导航菜单的本体部分。NavigationView是一个导航菜单框架,使用menu资源填充数据,使我们可以更简单高效的实现导航菜单。它提供了不错的默认样式、选中项高亮、分组单选、分组子标题、以及可选的Header。
compile ‘com.android.support:design:23.1.1’
典型的布局文件如下,外层是DrawerLayout,它的第一个child将作为content,第二个child作为Drawer
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
"match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
"@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
"match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Main UI" />
"@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="left"
android:fitsSystemWindows="true"
app:headerLayout="@layout/menu_header"
app:menu="@menu/menu_left">
NavigationView的两个自定义属性
app:headerLayout接收一个layout,作为导航菜单顶部的Header,可选项。
app:menu接收一个menu,作为导航菜单的菜单项,几乎是必选项,不然这个控件就失去意义了
侧滑Header布局
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
"centerCrop"
android:src="@mipmap/header"
android:layout_width="wrap_content"
android:layout_height="200dp" />
侧滑菜单menu
"1.0" encoding="utf-8"?>
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
actionBarDrawerToggle.syncState();//初始化状态
drawerLayout.setDrawerListener(actionBarDrawerToggle);
NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
navigationView.setNavigationItemSelectedListener(navigationItemSelectedListener);
private NavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener=new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
if (previousItem!=null){
previousItem.setChecked(false);
}
switch (item.getItemId()) {
case R.id.drawer_home:
break;
case R.id.drawer_favourite:
break;
case R.id.drawer_downloaded:
break;
default:
break;
}
previousItem = item;
Toast.makeText(MainActivity.this,item.getTitle(),Toast.LENGTH_SHORT).show();
item.setChecked(true);
drawerLayout.closeDrawers();
return true;
}
};