1. 概述
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

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {this.getMenuInflater().inflate(R.menu.menu, menu);mSearchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();//配置搜索信息并添加事件监听器});
2). 使用android:actionLayout
I). 声明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() {@Overridepublic void onClick(View v) {mCustomMenu.collapseActionView();}};    }@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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 eventmSearchMenu.collapseActionView();}return super.onKeyDown(keyCode, event);}}


更多相关文章

  1. android广播事件机制及应用(实现简单的定时提醒功能) 转
  2. android常驻通知栏点击事件
  3. Android Wear 交互表面设计及Android 双击事件监测实现
  4. Android ListView/ListActivity点击长按事件

随机推荐

  1. 详解Android TableLayout中stretchColumn
  2. android面试题大全 android面试题总结
  3. android 动态改变控件位置和大小
  4. Unable to resolve target 'android-18'
  5. Android ApiDemos示例解析(5):App->Activ
  6. Google I/O 2017 Android
  7. Android(安卓)Timer
  8. Android之IPC2————AIDL
  9. [Android] 切换语言后避免Activity重启方
  10. Android(安卓)OpenCV java.lang.Unsatisf