• 20150612_Andriod contextual action mode 菜单


    参考地址: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>

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

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

    esmenumain.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>


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

  • 相关阅读:
    TextView 内容设置成上下滑动 和 代码设置字体颜色
    Android提供了4种在其他线程中访问UI线程的方法
    Android 左右滑屏效果
    【自定义控件】 GridView
    【动画】【特效】activity跳转华丽的过渡效果(转载)
    Android获取设备型号、SDK版本及其系统版本
    【JSON】数据解析
    Android中文API集合
    【AssetManager】的使用与资源预加载
    @property(nonatomic,retain)
  • 原文地址:https://www.cnblogs.com/hutie1980/p/4571326.html
Copyright © 2020-2023  润新知