Android3.0之后,Google推出了ActionBar,使我们的操作栏更适于我们的视觉,虽然由于ActionBar的一些不灵活,目前差不多已经被Toolbar取代了,今天还是先介绍一些ActionBar
1.ActionBar的应用:
1.ActionBar 需要考虑使用哪一个版本;提供了 v7 的兼容版本(Android 2.1),和标准版本(Android 3.0 之后可用)
2. AppCompatActivity 或者是 ActionBarActivity 默认已经包含ActionBar的支持了
3. 通过 options menu,可以给ActionBar设置菜单和标题动作按钮
4. ActionBar 支持 Tab导航和下拉列表导航;通过代码来设置
5. ActionBar 使用 SearchView 可以实现在标题栏进行搜索
6. ActionBar 可以添加分享功能;
2.操作栏的设置
操作栏被分为适用于大多数应用程序四个不同的功能区。
1. App icon 2. View control 3. Action buttons 4.Action overflows
1.返回键
Google的规范:每一个Activity都会有有一个后退键, 除了主界面,我们如果设置App的icon时,可以直接将后退键的图标设置为我们项目的app icon.(一个捷径),系统会默认给他一个id(android.R.id.home)
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
// 设置后退键是否显示
actionBar.setDisplayHomeAsUpEnabled(true);
// 设置后退键的图标
actionBar.setHomeAsUpIndicator(R.mipmap.ic_launcher);
// 去除标题栏的标题
actionBar.setDisplayShowTitleEnabled(false);
}
2.. Tab导航和下拉列表导航
为ActionBar设置 Tab导航和下拉列表导航,目前都已经过时,这里先不介绍.
3..搜索效果
设置放大镜的效果,一般我们都是让他点击跳转到一个搜索框
我们可以在布局中这样设置,
<!-- collapseActionView 代表 当前MenuItem 点击的时候能够显示或者隐藏一个ActionView -->
<!-- V4包内部提供了SearchView的创建工具类,
V7包 提供了 android.support.v7.widget.SearchView
-->
<item
android:id="@+id/action_search"
android:title="搜索"
android:icon="@drawable/ic_action_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"
/>
之后再布局中,我们就可以把它当做一个普通的menu项找到id, 进行设置
// 3. v7包设置SearchView的方式
View view = MenuItemCompat.getActionView(item);
if(view != null){
mSearchView = (SearchView) view;
// 4. 设置 SearchView的查询回调接口
mSearchView.setOnQueryTextListener(this);
// 在搜索输入框没有显示的时候,点击Action,回调这个接口,并且显示输入框
//searchView.setOnSearchClickListener();
// 当自动补全的 内容被选中的时候,回调接口
//searchView.setOnSuggestionListener();
// 可以设置搜索的自动补全,或者实现搜索历史
//mSearchView.setSuggestionsAdapter();
}
/**
* 当用户在输入法中点击搜索按钮时,或者输入回车时,调用这个方法,发起实际的搜索功能
* @param query
* @return
*/
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(SearchActivity.this, "Submit " + query, Toast.LENGTH_SHORT).show();
mSearchView.clearFocus();
return true;
}
/**
* 每一次输入字符都会回调这个方法,实现搜索的联想功能
* @param newText
* @return
*/
@Override
public boolean onQueryTextChange(String newText) {
Toast.makeText(SearchActivity.this, "Ch: " + newText, Toast.LENGTH_SHORT).show();
return true;
}
4.菜单的设置相关的属性
<item
android:id="@+id/action_settings"
android:title="设置"
app:showAsAction="ifRoom"
android:orderInCategory="2"
/>
相关属性的介绍:
menu item 的优先级属性
1..orderInCategory 属性:填写数字即可,数字会根据所有Action的值按照升序排列,数字 1 第一个显示,数字越大越在后面显示。
2..orderInCategory :没有设置这个属性的item始终按照xml的顺序在最前面,之后才是跟着有顺序的item
3..ActionBar 显示的顺序,先显示没有orderInCategory的菜单,之后才是有orderInCategory的菜单
showAsAction
1. showAsAction 指定的属性,不能够100%确保期望的效果,因为ActionBar显示在标题上面的按钮,显示效果依赖于屏幕的宽度;
2. always 是总是显示在标题栏上面,当按钮非常多,会把菜单项挤出去;
3. ifRoom: 代表,当ActionBar的宽度还有剩余,能够继续放置菜单,那么这个时候,当前菜单项可能能够显示在ActionBar的标题上面;
如果没有空间,那么当前的菜单就显示在 “三个点”代表的菜单项当中;对于有些手机,需要点 “Menu”按键,才会显示出来菜单。
4. never : 代表指定的Action永远不再ActionBar(标题栏)上面显示,默认的.
5. withText 当ActionBar空间足够,能够同时显示标题,图标的时候,就会自动显示标题;如果没有空间,那么不显示标题
关于Toolbar的设置将在下篇博文介绍