Action View 是可以用来显示在动作栏上取代动作按钮的控件。添加Action View,需要在Menu 资源文件中为item 元素声明actionViewClass 或者actionLayout 属性。下面以添加系统提供的搜索控件为例:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.demo42.MainActivity" >
...
<item
android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom"
android:title="search"/>
</menu>
上面将showAsAction 属性设置为"ifRoom" 将这个搜索控件显示在动作栏上,它还有一个collapseActionView 属性,可以将ActionView 缩小成一个动作按钮。设置前后的效果如下图:
如果需要设置Action View 的响应事件,可以在Activity 中的onCreateOptionMenu() 回调方法中实现,使用getActionView() 方法通过对应的MenuItem 获得ActionView 对象。例如为SearchView 设置监听事件:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(MainActivity.this, "查询: " + query, Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
return false;
}
});
return true;
}