Android Contextual ActionBar (CAB)上下文操作栏使用指南

先直观的看看什么是上下文操作栏


这是来自android developer的原图,左边是Float menu,也就是原来的Context Menu,后边的就是我们要说的Contextual ActionBar,原文中叫Contextual Action Mode,由于操作按钮都是出现在ActionBar的位置,所以直接叫Contextual ActionBar好了。

Context Menu和Contextual ActionBar(以下简称CAB)与activity的菜单OptionMenu相比,不同就在于前两个是针对View的,可以为每个View添加相应的Context Menu和CAB,但是OptionMenu是针对整个Activity的。

前几天遇到一个面试的人,随口聊起来ActionBar,没想到那个人说自己从来不用ActionBar,从来都是自己实现一个Layout放在顶部,然后聊了ActionBar的其他一些特性,果然既不懂又不服。感觉很多人对ActionBar还是有一些误解,认为就是一个顶部的导航栏,其实ActionBar还有很多不错的用途,CAB就是其中一个。

本文主要是结合android developer文档写的,喜欢读英文的可以直接进入传送门Menus。

CAB是为了处理用户一连串动作,比如一个用户可能看到一段文字,觉得很好,就会想给分享给别人或者保存下来,当用户选中文字后,就可以出现CAB,CAB上包含分享按钮、复制按钮,让用户进行分享或者保存动作。

一般Contextual ActionBar都是监听View的LongClick事件,也就是长按组件出现CAB。

对于普通的View,比如Button、TextView等,一般实现可以简化为三步。

1、xml中实现menu

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_share"
          android:title="@string/share"
          android:icon="?attr/menuIconShare"
          android:showAsAction="always|withText" />
</menu>

2、实现ActionMode.Callback接口

class ActionBarCallBack implements ActionMode.Callback{

		@Override
		public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
			// TODO Auto-generated method stub
			//这里是对Contextual item的处理
			return false;
		}

		@Override
		public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
			// TODO Auto-generated method stub
			//这里是关键
			arg0.getMenuInflater().inflate(R.menu.main_context_menu, arg1);
			return true;
		}

		@Override
		public void onDestroyActionMode(ActionMode arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
			// TODO Auto-generated method stub
			return false;
		}
		
	}

3、为相应的view添加LongClick事件监听。

tv = (TextView) rootView.findViewById(R.id.fragment_main_tv);
			tv.setOnLongClickListener(new View.OnLongClickListener() {
				
				@Override
				public boolean onLongClick(View v) {
					// TODO Auto-generated method stub
					mContext.startSupportActionMode(mContext.new ActionBarCallBack());
					return false;
				}
			});
在onLongClick中调用startSupportActionMode(为了兼容,或者startActionMode),把第2步的Action.Call对象作为参数。

这样,长按view就会出现Contextual ActionBar,Android Contextual ActionBar (CAB)上下文操作栏使用指南_第1张图片



你可能感兴趣的:(android,Contextual,ActionMod)