在上一篇文章中我们详细介绍了什么是 Material Design,以及一些 MD 的风格,接下来我们就来进行实战,而 ToolBar 将会是我们第一个来进行实战的 Material 控件,虽然对 ToolBar 还不是那么熟悉,但是相信另一个相关的控件我们是非常熟悉的,那就是 ActionBar,相信这个大家都是很熟悉了,没错,活动的顶部导航的那个标题栏其实就是 ActionBar,我们之前的应用开发中一定都有 ActionBar 的相关使用,不过 ActionBar 由于其设计原因,应用有一定的局限性,比如被限定只能位于活动的顶部,从而不能实现一些 MD 风格,因此官方已经不建议使用 ActionBar 了,强力推荐使用 ToolBar,那么 ToolBar 到底好在哪里,ToolBar 的强大之处就在于,它不仅继承了 ActionBar 的所用功能,而且灵活性很高,可以配合一些其他的控件来完成一些 MD 的效果,扯淡就到这里,接下来开始演绎
新建一个 MaterialDesign 项目,我们马上开始吧
一、项目的主题默认是在哪里指定的?
首先我们要知道任何一个新建项目,默认都会显示 ActionBar,那么这个 ActionBar 到底是从哪里来的,其实这是根据项目中指定的主题来显示的,这里我们不妨打开我们新建项目的清单文件 AndroidManifest.xml 文件来看一下,如下所示:
android:theme="@style/AppTheme">
- @color/colorPrimary
- @color/colorPrimaryDark
- @color/colorAccent
这里定义了一个叫 AppTheme 的主题,然后指定它的 parent 主题是 Theme.AppCompat.Light.DarkAcionBar,这个 DarkActionBar 是一个深色的 ActionBar 主题,我们之前所有的项目中自带的 ActionBar 就是因为指定了这个主题才出现的,显示效果如下图:
现在我们就要使用 ToolBar 来替代 ActionBar,因此需要指定一个不带 ActionBar 的主题,通常有如下两种主题可选:
- @color/colorPrimary
- @color/colorPrimaryDark
- @color/colorAccent
/**
* ToolBar 练习
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
}
}
app:titleTextColor="#f5f0f0" />
android:label="你好"
android:supportsRtl="true"
android:theme="@style/AppTheme">
/**
* ToolBar 练习
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.backup:
Toast.makeText(this, "Click Backup", Toast.LENGTH_LONG).show();
break;
case R.id.delete:
Toast.makeText(this, "Click Delete", Toast.LENGTH_LONG).show();
break;
case R.id.setting:
Toast.makeText(this, "Click Setting", Toast.LENGTH_LONG).show();
break;
default:
}
return true;
}
}