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

来源:互联网 发布:软件的稳定性 编辑:程序博客网 时间:2024/05/16 18:32

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


这是来自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{@Overridepublic boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {// TODO Auto-generated method stub//这里是对Contextual item的处理return false;}@Overridepublic boolean onCreateActionMode(ActionMode arg0, Menu arg1) {// TODO Auto-generated method stub//这里是关键arg0.getMenuInflater().inflate(R.menu.main_context_menu, arg1);return true;}@Overridepublic void onDestroyActionMode(ActionMode arg0) {// TODO Auto-generated method stub}@Overridepublic boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {// TODO Auto-generated method stubreturn false;}}

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

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

这样,长按view就会出现Contextual ActionBar,



0 0
原创粉丝点击