谷歌提出的 Material Design,Design Support库,对于一些常用的效果和控件进行封装。使用Material Design 就要隐藏掉ActionBar,修改软件的主题显示样式,就在style.xml文件里面,替换掉下面这句,这句parent和面跟的就是隐藏ActionBar的主题
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
ToolBar
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"//和原有Bar一样高
android:background="?attr/colorPrimary" android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"//指定ToolBar主题 app:layout_scrollFlags="scroll|enterAlways|snap" />
<!--Toobar在APPBarlayout中添加这个属性ToolBar会跟着主题内容上滑隐藏,下划出现-->
在ToolBar上添加action按钮,在res目录,新建Directory文件夹(menu),创建一个yoolbar.xml文件,showAsAction属性是设置按钮的显示,always永远显示在Toolbar 中,屏幕空间不够则不显示,ifRoom表示屏幕有足够空间句显示,否则就显示在菜单中,nerve表示永远显示在菜单中,
注:ToolBar中的action只会显示图标。而action按钮只会显示文字
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/backup"
android:icon="@mipmap/ic_backup"
android:title="Backup"
app:showAsAction="always"/>//总是显示
<item
android:id="@+id/delete"
android:icon="@mipmap/ic_delete"
android:title="Delete"
app:showAsAction="ifRoom"/>//屏幕充足显示
<item
android:id="@+id/settings"
android:icon="@mipmap/ic_delete"
android:title="Settings"
app:showAsAction="never"/>//从不显示
<item
android:id="@+id/startactivty"
android:icon="@mipmap/ic_add"
android:title="StartActivity"
app:showAsAction="always"/>
</menu>
在主函数中设置并且重写onCreateOptionsMenu()方法,添加空间到ToolBar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar, menu);
return true;
}
DrawerLayout是一个布局,在布局里面只允许放两个直接子控件,第一个是主屏幕显示的内容,第二个是滑动菜单中显示的内容。,第二个子控件加黑需要注意,必须添加,该属性是指,在手机哪一侧划出菜单,star根据系统语言进行判断,left,由左向右划出,right相反
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.ca.sd.zsl.toolbartest"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="text.materialdesign.MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
</FrameLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"//
android:text="这是侧滑菜单" />
</android.support.v4.widget.DrawerLayout>
//设置按钮弹出菜单
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);//先获取布局实例,
ActionBar actionBar = getSupportActionBar();然后获取ActionBar实例,
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);//让按钮显示出来
actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);//设置图片 }
home按钮的点击事件,重写onOptionsItemSelected方法。
@Override public boolean onOptionsItemSelected(MenuItem item)
{ switch (item.getItemId())
在ToolBar最左侧的图标就叫做HomeAsUp按钮,它的ID永远是android.R.id.home
case android.R.id.home:STAR:
mDrawerLayout.openDrawer(GravityCompat.START);//打开视图到x轴的开始位置,不改变大小,END:打开视图到x轴的结束位置,不改变大小
break;
default: break;
}
return true;
}