参考地址:http://www.xuebuyuan.com/1114028.html
              http://www.cnblogs.com/mengdd/p/3564782.html
              http://www.cnblogs.com/mengdd/p/3565213.html

contextual action mode 是系统继承ActionMode所得,主要是获取用户的焦点来交互相关的动作。当用户选择一个选项就会启动这种模式,一个上下文的 ActionBar 就会出现在屏幕的上方来显示用户执行当前选项所获得上下文菜单。
注意:contextual action mode 与 action bar是没有必然关联的。这个操作是独立的,尽管这个 contextual action mode 看起来覆盖于 action bar 的位置。

ifRoom 会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个数并不仅仅局限于4个,依据屏幕的宽窄而定
never 永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义item的时候,最好把标题都带上。
always 无论是否溢出,总会显示。
withText  withText  值示意Action bar要显示文本标题。Action bar会尽可能的显示这个标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可能显示不全。
collapseActionView  声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。一般要配合ifRoom一起使用才会有效果。

//////////////////////////////////////////////////////////////////////////////////////////
package com.example.ht;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

////////////////////
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.content.Intent;

import android.view.LayoutInflater;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.SearchView;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.ViewConfiguration;
import android.view.Window;

import android.view.ActionMode;
////////////////////

public class MainActivity extends ActionBarActivity {

////////////////////

private ActionBar actionBar = null;
    private Button myButton01;
   
    private ActionMode actionMode;  //使用 ActionMode 完成菜单操作
   
    private LayoutInflater MenuInflater;
    private Fragment fragmentA;

////////////////////

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

////////////////////
        //绑定用户的动作,注意这个事件必须是一个长按事件
        myButton01 = (Button)findViewById(R.id.button1);
        myButton01.setOnClickListener(new View.OnClickListener() {
           
            /*
             * 当你调用startActionMode()方法的时候,系统就会返回一个ActionMode的实例,保存在成员变量中,就可以通过改变上下文条栏来触发对应的事件
             * 在下面的的例子中,ActionMode的判断是为了确保在它活动期间不会被重复的再创建,通过在创建实例的时候判断其是否为空。
             * @see android.view.View.OnLongClickListener#onLongClick(android.view.View)
             */
          @Override
             public void onClick(View v) {
                if(actionMode != null) {
                    //return false;
                }         
                actionMode = startActionMode(mActionModeCallBack);
                v.setSelected(true);
                //return true;
            }
        });
        ////////////////////
    }
   
   
   
   
    ////////////////////
    //这里面是一个匿名内部类
    private ActionMode.Callback mActionModeCallBack = new ActionMode.Callback() {
       
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            return false;
        }
       
        @Override
        public void onDestroyActionMode(ActionMode mode) {
            // TODO Auto-generated method stub
            //当我们不在使用菜单的时候, actionMode = null 在菜单销毁的时候置空
            actionMode = null;
        }
       
        //表示我们要加载菜单,从XML中加载菜单
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            MenuInflater inflate = getMenuInflater();
            inflate.inflate(R.menu.main, menu);
            return true; //返回true 表示加载成功。
        }

//处理用户的相应动作
        //表示从点击菜单选项中捕获用户的操作
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            // TODO Auto-generated method stub
            switch (item.getItemId()) {
                //case R.id.action_settings:
                case R.id.edit:
                    Toast.makeText(MainActivity.this, "Edit", 3).show();
                    break;
                case R.id.share:
                    Toast.makeText(MainActivity.this, "share", 3).show();
                    break;
                case R.id.delete:
                    Toast.makeText(MainActivity.this, "delete", 3).show();
                    break;
            }
            return false;
        }
    };
   
    ////////////////////

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);
     return true;
     
     /*
        super.onCreateOptionsMenu(menu);
        MenuItem add = menu.add(0, 1, 0, "Save");
        MenuItem open = menu.add(0, 2, 1, "Open");
        MenuItem close = menu.add(0, 3, 2, "Close");
        add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        open.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        close.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        return true;
        */
       
    }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
   
}

//////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.ht.MainActivity" >

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Main_form" />

<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:text="Button" />

</RelativeLayout>

//////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////

\res\menu\main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.ht.MainActivity" >

<item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="always"/>
       <!--   app:showAsAction="never"/> -->
   
  <item
        android:id="@+id/share"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Share"/>
    <item
        android:id="@+id/edit"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Edit"/>
    <item
        android:id="@+id/delete"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Delete"/>
       
</menu>

//////////////////////////////////////////////////////////////////////////////////////////

20150612_Andriod contextual action mode 菜单的更多相关文章

  1. android 开发-(Contextual Menu)上下文菜单的实现

    在android3.0以后,安卓设备不在提供物理的菜单按键,同时,android应用提供了另外的菜单实现机制,来替代之前的菜单创建方式.安卓设备中,平常可以使用长按住某个内容弹出菜单选项.这就是我们需 ...

  2. Android Contextual Menus之二:contextual action mode

    Android Contextual Menus之二:contextual action mode 接上文:Android Contextual Menus之一:floating context me ...

  3. Contextual Action bar(3) 两个示例

    一.通过activity启动Context Action Bar 1.主java public class ActivityActionModeFrgmt extends Fragment imple ...

  4. Contextual Action bar(2) 简介,启动,各函数介绍

    一.Context Action Bar简介 它是一个ActionBar,有各种操作项,但它不是始终显示的ActionBar,它需要上下文才显示.样式如下: 二.Context Action Bar的 ...

  5. Contextual Action bar(1) CAB in Android

    Contextual Action bar (CAB) in Android BY PARESH MAYANI - OCTOBER, 23RD 2013 Before getting into the ...

  6. Creating Contextual Menus创建上下文菜单

    A contextual menu offers actions that affect a specific item or context frame in the UI. You can pro ...

  7. 第15.15节 PyQt(Python+Qt)入门学习:Designer的menu菜单、toolBar工具栏和Action动作详解

    老猿Python博文目录 老猿Python博客地址 一.引言 Qt Designer中的部件栏并没有菜单.toolBar以及Action相关的部件,仅在MainWindow类型窗口提供了menu.to ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中Action关联menu菜单和toolBar的方法

    1.Action关联菜单 通过菜单创建的Action,已经与菜单自动关联,如果是单独创建的Action,需要与菜单挂接时,直接将Action Editor中定义好的Action对象拖拽到菜单栏上即可以 ...

  9. Android Contextual Menus之一:floating context menu

    Android Contextual Menus之一:floating context menu 上下文菜单 上下文相关的菜单(contextual menu)用来提供影响UI中特定item或者con ...

随机推荐

  1. 定制对ArrayList的sort方法的自定义排序

    java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将Arr ...

  2. Java基础之写文件——将素数写入文件中(PrimesToFile)

    控制台程序,计算素数.创建文件路径.写文件. import static java.lang.Math.ceil; import static java.lang.Math.sqrt; import ...

  3. 【转】Tomcat组件生命周期管理

    Tomcat组件生命周期管理 Tomcat中Server,Service,Connector,Engine,Host,Context,它们都实现了org.apache.catalina.Lifecyc ...

  4. Azure billing 分析(2)

    美国中南部的2008R2的A1的VM放了一天,CPU时间涨了13个小时,有点小贵,真的没有操作啊... 提示早上7到9点有一个小高峰. 看来平时没什么访问量时,还是改成A0能省点钱.因为第一天是用A0 ...

  5. 类似 select 选择框效果及美化

    网上有各种各样的关于 select 选择框的美化,找了很多,并没有好的样式效果.所以就找了一个利用 ul li 做的类似 select 选择框的效果,不废话了,先上图,效果如下: 对于上图的箭头效果, ...

  6. PostgreSQL Replication之第十一章 使用Skytools(5)

    11.5 关于walmgr 的介绍 walmgr 是一个简化基于文件事务日志传输的工具.早在过去的一些日子里(在9.0版本之前),使用walmgr来简化基本备份是很常见的.随着流复制的引入,情况有了一 ...

  7. (转载)R14也称作子程序连接寄存器

    R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器LR.当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份. 其他情况下,R14用作通用寄 ...

  8. $.toJSON的使用方法

    我们都会使用jQuery的ajax方法取得json数据但是我们有的时候也要使用json数据给PHP传值,这个怎么做哪? 首先去http://code.google.com/p/jquery-json/ ...

  9. async fifo

    异步fifo,解决跨时钟域的数据传输问题. 由binary,gray两种counter组成,在读写domain之间,只传输gray code. 主要的设计难点在empty和full的产生中. empt ...

  10. yii2复选框

    Yii2复选框的具体使用方法如下,以商品中的品牌为例在页面显示 第一种方法:使用ActiveForm::checkBoxlist()(这种方法可以把后台获取到的数据都生成复选框),具体使用如下: &l ...