1. 概述
Action View是作为action item按钮的替代品显示在action bar中的一个widget
2. 使用
要在菜单资源中的一个item声明一个action view,你既可以使用android:actionLayout属性也android:actionViewClass属性来分别指定一个布局资源或要使用的可视构件类。
1). android:actionViewClass方式
I). 声明action item
如果不设置此项,则左边app icon没有向上返回功能,并且这个SearchView不会给其余的action item留空间
I). 声明action item
res/menu/menu.xml
src/com/wind/actionbar/HelloActionBar.java
Action View是作为action item按钮的替代品显示在action bar中的一个widget
2. 使用
要在菜单资源中的一个item声明一个action view,你既可以使用android:actionLayout属性也android:actionViewClass属性来分别指定一个布局资源或要使用的可视构件类。
1). android:actionViewClass方式
I). 声明action item
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_search"
android:title="@string/menu_search"
android:icon="@drawable/ic_menu_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.widget.SearchView" />
</menu>
在android:showAsAction添加collapseActionView的效果是点击menu_search项,则能显示其余的action item(menu item),并且左边按钮有向上返回的功能,如果不设置此项,则左边app icon没有向上返回功能,并且这个SearchView不会给其余的action item留空间
II). 可以处理SerachView
src/com/wind/actionbar/HelloActionBar.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.getMenuInflater().inflate(R.menu.menu, menu);
mSearchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
//配置搜索信息并添加事件监听器
});
2). 使用android:actionLayoutI). 声明action item
res/menu/menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/item1"
android:title="111"
android:icon="@drawable/ic_about"
android:showAsAction="ifRoom|collapseActionView"
android:actionLayout="@layout/custom_action_view">
</item>
</menu>
II).res/layout/custom_action_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/action_layout"
android:orientation="horizontal" >
<EditText
android:id="@+id/edit_number"
android:hint="input number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button_delete"
android:text="Del"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
III). 为ActonView增加事件监听src/com/wind/actionbar/HelloActionBar.java
package com.wind.actionbar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnActionExpandListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SearchView;
import android.widget.TextView;
public class HelloActionBarActivity extends Activity{
private static final String TAG = "HelloActionBarActivity";
TextView mTextView;
SearchView mSearchView;
MenuItem mSearchMenu;
MenuItem mCustomMenu;
private View mCustomMenuView;
private Button mQuit;
private OnClickListener mQuitListener;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.main);
mTextView = new TextView(this);
mTextView.setText("AAA");
mQuitListener = new OnClickListener() {
@Override
public void onClick(View v) {
mCustomMenu.collapseActionView();
}
};
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.getMenuInflater().inflate(R.menu.menu, menu);
mSearchMenu = menu.findItem(R.id.menu_search);
mCustomMenu = menu.findItem(R.id.item1);
mCustomMenuView = menu.findItem(R.id.item1).getActionView();
mQuit = (Button) mCustomMenuView.findViewById(R.id.button_delete);
mQuit.setOnClickListener(mQuitListener);
mSearchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
//配置搜索信息并添加事件监听器
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) { //响应menu item或者action item的点击
Log.v(TAG, "onOptionsItemSelected");
switch(item.getItemId()){
case R.id.item1:
Log.v(TAG, "item1 pressed");
break;
default:
Log.v(TAG, "default");
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.v(TAG, "onKeyDown - keyCode is " + keyCode);
if(keyCode == KeyEvent.KEYCODE_SEARCH){//测试的时候4.2版本在按下软键盘的Search键时没有看到报这个键值
Log.v(TAG, "KEYCODE_SEARCH is pressed");
//TODO process Search event
mSearchMenu.collapseActionView();
}
return super.onKeyDown(keyCode, event);
}
}