ActionBar之setting+Menu+ActionMode介绍

   

之前我一直用ActionBarSherlock这个开源项目来做ActionBar,因为它可以让低版本的设备也能用上ActionBar。但是在最新的SDK中Google提供了一个AppCompat的工程作为libary。它里面就提供了向低版本兼容的ActionBar,所以我们就直接用官方的库就行了。这里需要注意的是,如果你是用最新的Eclipse with SDK自动创建的工程,那么就没有问题,如果是自己建立的工程,那么就需要设置style文件和添加一些命名空间,具体步骤请参照:http://blog.csdn.net/xyz_lmn/article/details/12623609。所以这里还是推荐大家去升级最新的SDK和ADT,我是用Eclipse来编写的。其他的编译器,如android studio,可能有不同的方式。

一、一些常规的设置

     actionBar = getActionBar();//初始化ActionBar
        actionBar.setDisplayHomeAsUpEnabled(true);//显示左边的小箭头
        actionBar.setDisplayShowHomeEnabled(true);//显示home图片
        setTitle("标题");//设置标题

        actionBar.setIcon(getResources().getDrawable(R.drawable.ic_launcher));//设置左边的图标
        actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.bar_color));//设置背景图

显示和隐藏

     case R.id.hide_button_id:
            actionBar.hide();
            break;
        case R.id.show_button_id:
            actionBar.show();
            break;

二、给ActionBar中添加MenuItem

1)从xml文件中静态添加

在res/menu下建立一个xml文件,我这里叫做main,添加如下代码:

<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.kale.actionbar.MainActivity" >

    <item
        android:id="@+id/action_settings"
        android:showAsAction="withText"
        android:title="菜单"
        app:showAsAction="always">
 <!-- android:icon="@drawable/ic_launcher" -->
        <!-- 如果菜单下面有group,建议菜单项是永远显示的。如果用never,就会出现二级菜单的别扭操作 -->
        <menu>

            <!-- 定义菜单类型checkableBehavior:single(单选菜单)/all(多选)/none(普通) -->
            <group android:checkableBehavior="none" >
                <item
                    android:id="@+id/menu01_id"
                    android:icon="@drawable/ic_launcher"
                    android:title="选项01"/>
                <item
                    android:id="@+id/menu02_id"
                    android:title="选项02"/>
            </group>
        </menu>
    </item>
    <!-- 一个最简单的菜单 -->
    <item
        android:icon="@drawable/ic_refresh"
        android:showAsAction="withText"
        android:title="simple"
        app:showAsAction="always"/>
    <!-- 自定义的视图菜单 -->
    <item
        android:id="@+id/clock_item_id"
        android:showAsAction="withText"
        android:title="clock"
        app:actionLayout="@layout/clock"
        app:showAsAction="always"/>

</menu>

* 官方推荐每一个item项都要有icon和title图标,因为系统默认显示的是图标,
* 而且当屏幕空间不够的时候,未显示的菜单就会隐藏到列表中,而列表中只能显示title字段的值。

    <item
        android:id="@+id/clock_item_id"
        android:showAsAction="withText"
        android:title="clock"
        app:actionLayout="@layout/clock"
        app:showAsAction="always"/>这里需要特别注意的是,文件要有自己的命名空间。而且设置showAsAction或actionLayout时需要用自定义命名空间中的属性,否则无效!

然后我们在代码中使用回调函数和相应的监听器就能得到按钮的事件了

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        AnalogClock clock = (AnalogClock) menu.findItem(R.id.clock_item_id)
                .getActionView();return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
        case R.id.home:
            break;
        case R.id.homeAsUp:
            break;

        default:
            break;

        }

        return super.onOptionsItemSelected(item);
    }

2)用代码添加菜单

除了用xml文件添加菜单外,我们还可以在代码中对菜单进行添加:

private void createMenu(Menu menu) {
        // add (int groupId, int itemId, int order, int titleRes)
        MenuItem item01 = menu.add(0, 01, 0, "group 1");
        item01.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);

        MenuItem item02 = menu.add(0, 02, 0, "group 2");
        item02.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
    }

然后在方法中初始化即可

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
            createMenu(menu);
        return true;
    }

三、添加ActionMode菜单

Android 3.0以前,我们处理列表的长按事件经常使用Context Menu,Android3.0以后,我们有了新的选择:ActionMode。下图左边效果为Context Menu右边效果为ActionMode。

但对于长按出现菜单这个事件,我还是推荐用Context Menu来做,因为现在手机屏幕越来越大,点击上方或者下方都是很别扭的事情,中间的弹出菜单式比较好的选择。

图片来自:http://xyzlmn.blog.51cto.com/2532390/1344872

使用ActionMode需要3步:

  1、实现ActionMode.Callback接口

  2、处理ActionMode的生命周期

  3、调用startSupportActionMode(Callback callback)方法

1、建立类,继承接口。2、在里面处理初始化的内容和点击事件

    /**
     * @author:Jack Tony
     * @tips  :处理ActionMode的生命周期事件
     * 感谢:http://xyzlmn.blog.51cto.com/2532390/1344872
     * @date  :2014-7-27
     */
    private class ActCallback implements android.support.v7.view.ActionMode.Callback {

        /*
         * (非 Javadoc)
         *
         * @see
         * android.support.v7.view.ActionMode.Callback#onCreateActionMode(android
         * .support.v7.view.ActionMode, android.view.Menu) 第一次初始化的时候调用
         */
        @Override
        public boolean onCreateActionMode(ActionMode arg0, Menu menu) {
            menu.add("Save").setIcon(R.drawable.ic_compose)
                    .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

            menu.add("Search").setIcon(R.drawable.ic_search)
                    .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

            menu.add("Refresh").setIcon(R.drawable.ic_refresh)
                    .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
            return true;
        }

        /*
         * (非 Javadoc)
         *
         * @see
         * android.support.v7.view.ActionMode.Callback#onPrepareActionMode(android
         * .support.v7.view.ActionMode, android.view.Menu) 在初始化后和每次重新构建的时候调用
         */
        @Override
        public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
            return false;
        }

        /*
         * (非 Javadoc)
         *
         * @see
         * android.support.v7.view.ActionMode.Callback#onActionItemClicked(android
         * .support.v7.view.ActionMode, android.view.MenuItem) 但控件被点击的时候调用
         */
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            Toast.makeText(MainActivity.this, "Got click: " + item, Toast.LENGTH_SHORT).show();
            mode.finish();
            return false;
        }

        /*
         * (非 Javadoc)
         *
         * @see
         * android.support.v7.view.ActionMode.Callback#onDestroyActionMode(android
         * .support.v7.view.ActionMode) 当mode被关闭的时候调用
         */
        @Override
        public void onDestroyActionMode(ActionMode arg0) {

        }

    }

3、在按钮上调用方法 (补充:ActionMode mMode;)

    case R.id.openMode_button_id:

             mMode = startSupportActionMode(new ActCallback());
             mMode.setTitle("Mode Title");
            break;
        case R.id.closeMode_button_id:
            if (mMode != null) {
                mMode.finish();
            }
            break;

源码下载:http://download.csdn.net/detail/shark0017/7683623

ActionBar之setting+Menu+ActionMode介绍

时间: 2024-08-18 09:18:12

ActionBar之setting+Menu+ActionMode介绍的相关文章

Actionbar&amp;Toolbar 自定义Menu 布局--ActionProvider的使用

一般情况 多数时menu都是使用一张图片作为一个menu item,少数时候menu用文字,所以绝大多数时候,android:title.android:icon就能满足需求. 特殊情况 要求menu是一个可以动态控制的item,可以动态更新,布局也不止是一张图片一个string那么简单,如下图中红色框中的menu item所示,购物车的icon上悬浮数量,数量动态变化 除此之外还要求可以逻辑处理可以复用 这样的时候,就必须用到ActionProvider了. Api解释 与操作视窗类似,操作提

(转)Android新的menu实现——ActionMode

Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode.ActionMode是Android 3.0以后出现的,我们可以使用AppCompat库使ActionMode兼容至Android 2.1. Android 3.0以前,我们处理列表的长按事件经常使用Context Menu,Android3.0以后,我们有了新的选择:ActionMode.下图左边效果为Context Menu右边效果为Acti

Menu与ActionBar的爱恨情仇

最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评指正. 一.Android系统里的菜单接口(即Menu接口),它是一个父接口,其下又有两个子接口:SubMenu(子菜单)与ContextMenu(上下文菜单) 常用的菜单有以下三类:Option Menu(选项菜单,常与ActionBar连用),Context Menue(上下文菜单),Popup

设置ActionBar menu文字的属性

前段时间使用ActionBar 做了一个应用,使用到了support  v7 这个包,这个包比原来的support  v4 要强大的多,这里就不讲书怎么引用support  v7 这个包了 ,进入主题我在ActionBar中要使用一个menu.xml布局文件来展示标题文字,但是menu.xml文件中 没有对文字的属性设置,然后找到,support  v7的style文件,在里面发现一个父类style是Theme.AppCompat.Light.DarkActionBar,然后找到这个style的

android menu 开发

menu 分类: 选项菜单(OptionsMenu) 上下文菜单(ContextMenu) 子菜单(SubMenu) 弹出菜单(Popup) 首先说 选项菜单(OptionsMenu) 一.方法介绍: public booleanonCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu . public booleanonOptionsItemSelected(MenuItem item):选中菜单项后发生的动作. public voidonOption

menu-存在于ActionMode中的菜单

下图左边效果为Context Menu右边效果为ActionMode. Context Menu是悬浮在操作项之上的视图: ActionMode是临时占据了ActionBar的位置 下面给出ActionMode的实现方法. 使用ActionMode需要两步骤: 1.实现ActionMode.Callback接口,并处理ActionMode的生命周期,ActionMode的生命周期如下图:   private ActionMode.Callback mCallback = new ActionMo

【Android UI设计与开发】之详解ActionBar的使用

详解Android中的ActionBar的使用 请尊重他人的劳动成果,转载请注明出处:详解Android中的ActionBar的使用 http://blog.csdn.net/fengyuzhengfan/article/details/40216389 ActionBar是Android 3.0(API level 11)引入的一个新控件,它代表了应用程序标题栏,如果要开发兼容的程序,可以使用v7包下的ActionBar.我们在应用中看见的ActionBar一般是下图的样子,比如有道词典及微信

【Android界面实现】使用ActionBar和DrawerLayout纯原生控件,实现侧滑栏和滑动Tab界面

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的文章中,我们使用第三方开源控件,比如说是SlidingMenu和PagerSlidingTabStrip,实现过侧滑栏和滑动Tab界面.但是在support-v4包中,提供了原生的侧滑栏控件DrawerLayout,而滑动的Tab效果,我们可以使用ViewPager和ActionBar上的Tab来进行实现.所以在今天的文章里面,我们将介绍如何将DrawerLayout与ActionBar进行整合,

Android官方导航栏ActionBar(二)—— Action View、Action Provider、Navigation Tabs的详细用法

在上一篇文章(Android之官方导航栏ActionBar)中,我们介绍了ActionBar各组成部分的基本应用.ActionBar除了提供Action Buttons外,还提供了多种导航方式如 Action View.Action Provider.Navigation Tabs.Drop-down Navigation等,下面我们将具体介绍他们的用法. 一.Action View 首先来看Action View,action view是用于替换action button并显示在action