Material Design 是谷歌公司提出的一套界面设计规范,使用它的相应主题就能得到相对应的Material Design风格
Material主题有三种

两种兼容主题 兼容主题都在 com.android.support:appcompat-v7:28.0.0 各个版本V7包下面

我们一般使用兼容主题
Theme.AppCompat.Light.DarkActionBar
新建一个项目,使用 Theme.AppCompat.Light.DarkActionBar 主题 看看界面的效果
<style name="AppThemes" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><!-- 标题栏颜色 --><item name="colorPrimary">@color/colorPrimary</item><!-- 状态栏颜色 --><item name="colorPrimaryDark">@color/colorPrimaryDark</item><!-- 强调颜色 --><item name="colorAccent">@color/colorAccent</item><!-- 窗口颜色 --><item name="android:windowBackground">@android:color/white</item><!-- 虚拟导航栏颜色 --><item name="android:navigationBarColor">@color/colorPrimary</item><!--<!–设置menu菜单的背景色–>--><!--<item name="android:itemBackground">@color/black</item>--><!--<!–设置Menu菜单的字体颜色–>--><!--<item name="android:textColorPrimary">@android:color/darker_gray</item>--><!--<!–设置Menu窗口不覆盖ToolBar视图–>--><!--<item name="overlapAnchor">false</item>--></style><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppThemes">//设置Material方式的主题<activity android:name=".Toolbarctivity"android:theme="@style/AppTheme.NoActionBar"/><activityandroid:name=".MainActivity"android:label="@string/app_name"android:theme="@style/AppThemes">//设置Material方式的主题<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
</application>

可以看到这就是Material的风格了 状态栏 标题栏 虚拟导航栏 我颜色都改变了,接下来 我们把虚拟导航栏的颜色改为红色看看效果
<!-- 虚拟导航栏颜色 --><item name="android:navigationBarColor">@color/colorAccent</item>

(1) Toolbar的使用
Toolbar是什么了? 它其实就是一个标题栏而已,是谷歌公司为我们提供的一个控件
使用它 需要先导入 appcompat-v7 包,对应你自己项目版本的就行,然后再你的 xml布局文件中进行添加
我们新建一个Activity Toolbarctivity,在它的布局文件中使用Toolbar
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.Toolbarandroid:id="@+id/tb_at_toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"// Toolbar 的主题app:layout_scrollFlags="scroll|enterAlways"app:logo="@mipmap/ic_launcher"app:popupTheme="@style/ThemeOverlay.AppCompat.Light"//菜单显示的主题app:subtitle="副标题"app:subtitleTextColor="#FFFFFF"app:title="标题"app:titleTextColor="#FFFFFF"></android.support.v7.widget.Toolbar></LinearLayout>
menu菜单
<?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"><itemandroid:id="@+id/add"android:icon="@drawable/ic_menu_camera"android:title="add"app:showAsAction="always"/>//总是显示<itemandroid:id="@+id/delete"android:icon="@drawable/ic_menu_slideshow"android:title="delete"app:showAsAction="never"/>//不显示这个图标<itemandroid:id="@+id/tb_setting"android:title="Settings"android:icon="@drawable/ic_menu_manage"android:orderInCategory="100"app:showAsAction="ifRoom"/>//如果空间够就显示
</menu>
对应Activity代码
public class Toolbarctivity extends AppCompatActivity
{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_toolbarctivity);Toolbar tbAtToolbar = findViewById(R.id.tb_at_toolbar);//把tbAtToolbar 设置到 ActionBar里面 这样就可以当做ActionBar来使用 //这一步很重要 不这样设置 就是空白,并且下面两行代码位置不能替换setSupportActionBar(tbAtToolbar);ActionBar actionBar = getSupportActionBar();if (actionBar != null){//设置Toolbar home键可点击actionBar.setDisplayHomeAsUpEnabled(true);//设置Toolbar home键图标 如果不设置,默认是一个箭头//actionBar.setHomeAsUpIndicator(R.drawable.ic_drawer_am);}}//配置菜单@Overridepublic boolean onCreateOptionsMenu(Menu menu){getMenuInflater().inflate(R.menu.toobalr, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item){switch (item.getItemId()){case android.R.id.home:Toast.makeText(this, "home", Toast.LENGTH_SHORT).show();break;case R.id.add:Toast.makeText(this, "add", Toast.LENGTH_SHORT).show();break;case R.id.delete:Toast.makeText(this, "delete", Toast.LENGTH_SHORT).show();break;case R.id.tb_setting:Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show();break;}return true;}
}
manifest配置
<activity android:name=".Toolbarctivity"android:theme="@style/AppTheme.NoActionBar"/><style name="AppTheme.NoActionBar"><item name="windowActionBar">false</item><item name="windowNoTitle">true</item><item name="overlapAnchor">false</item>//菜单的显示方式 <item name="android:navigationBarColor">@color/colorPrimary</item>//修改当前Activity的虚拟导航栏颜色</style>
运行看看效果

如果我们想自己定义标题,并且居中,可以这么做
<android.support.v7.widget.Toolbarandroid:id="@+id/tb_at_toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:layout_scrollFlags="scroll|enterAlways"app:logo="@mipmap/ic_launcher"app:popupTheme="@style/ThemeOverlay.AppCompat.Light"app:subtitle="副标题"app:subtitleTextColor="#FFFFFF"app:title="标题"app:titleTextColor="#FFFFFF"><TextViewandroid:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:gravity="center"android:text="我是标题"android:textColor="#FFFFFF"/></android.support.v7.widget.Toolbar>
我们再看看效果
这里要注意的是 如果我们自己添加了标题,那么Toolbar里的标题和副标题就不会在显示了

在国内App中,标题栏几乎没有这么多的内容,我们来精简一下看看
在布局文件中去掉 logo 标题 副标题 这些属性
<android.support.v7.widget.Toolbarandroid:id="@+id/tb_at_toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:layout_scrollFlags="scroll|enterAlways"app:popupTheme="@style/ThemeOverlay.AppCompat.Light"><TextViewandroid:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:gravity="center"android:text="我是标题"android:textColor="#FFFFFF" /></android.support.v7.widget.Toolbar>
men配置文件中只显示菜单图标 app:showAsAction=“never” 即为不显示,不显示的将会出现在菜单列表中 add 和 delete 将会出现在菜单列表里
<?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"><itemandroid:id="@+id/add"android:icon="@drawable/ic_menu_camera"android:title="add"app:showAsAction="never"/><itemandroid:id="@+id/delete"android:icon="@drawable/ic_menu_slideshow"android:title="delete"app:showAsAction="never"/><itemandroid:id="@+id/tb_setting"android:title=""android:orderInCategory="100"app:showAsAction="always"/>
</menu>
Activity里面 不设置Home图标 默认显示箭头
//actionBar.setHomeAsUpIndicator(R.drawable.ic_drawer_am);
再来看看效果,是否符合国内的风格

