的各种API方法了。
到此,我们就完成了ToolBar的添加,还算简单吧?
二、ToolBar外观的自定义
不出意外的话,我们运行的结果将会和下图类似:
大绿底,大黑字,实在不怎么好看。
那么,如果我们想要自定义配色方案,该如何做呢?参考下图:
这些值我们都可以在color.xml中定义,并在styles.xml中引用。下图是一个重新定义配色方案后的截图:
相关的代码片:
color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#002FA7</color>
<color name="colorPrimaryDark">#001F67</color>
<color name="colorAccent">#003FB7</color>
<color name="textColorPrimary">#FFFFFF</color>
</resources>
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
</style>
细心的读者会发现,后面的截图中,右上角多了菜单项,这又是如何实现的呢?我们继续往后看。
三、给ToolBar增加动作
首先我们来看看如何给ToolBar增加菜单,我们依然分为3步完成。
1. 编写菜单xml文件,操作对象:menu文件夹下的菜单xml文件
这里我添加了两个菜单,如上图所示,一个隐藏在“更多”里,另一个是搜索。如下代码片所示:
<?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">
<item
android:id="@+id/menu_main_info"
android:title="@string/menu_main_activity_info"
app:showAsAction="never" />
<item
android:id="@+id/menu_main_search"
android:title="@string/menu_main_activity_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always" />
</menu>
如上,我们可以看到有两个item,分别对应Info和搜索,我们使用"app:showAsAction"的值来控制这个菜单是否显示,常见的值有always,ifRoom,never。从字面上也很好理解,这里就不多解释了。
2. 接下来是Java代码片段:
private SearchView tbSearchSv;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_activity_menu, menu);
MenuItem searchItem = menu.findItem(R.id.menu_main_search);
tbSearchSv = (SearchView) searchItem.getActionView();
return super.onCreateOptionsMenu(menu);
}
细心的朋友会发现有这一行:
app:actionViewClass="android.support.v7.widget.SearchView"
它是做什么的呢?
对了!它就是搜索栏,是原生的搜索栏。所以某些情况下,这个搜索栏是不用自己去实现的,系统已经给我们提供了SearchView!
典型的APP:网易云音乐、知乎上方的搜索都是这样的。
3. 为菜单设置监听器,我们先来看最普通的Info按钮,我们只需在Java代码中Override指定的方法就可以了,如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_main_info:
Toast.makeText(MainActivity.this, R.string.menu_main_activity_info, Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
对于搜索栏,首先我们想到的是,如何获取用户输入的内容呢?
其实很简单,玄机在于SearchView,只需对SearchView添加监听器就可以了。
tbSearchSv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
这里要注意,设置监听器前,要确保SearchView(这里的tbSearc