ActionBar - Action View
16lz
2021-01-23
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
@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);}}
更多相关文章
- android广播事件机制及应用(实现简单的定时提醒功能) 转
- android常驻通知栏点击事件
- Android Wear 交互表面设计及Android 双击事件监测实现
- Android ListView/ListActivity点击长按事件