ActionBar - Action View

来源:互联网 发布:ecshop商城源码 编辑:程序博客网 时间:2024/06/13 08:24
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);}}


原创粉丝点击