天天看点

系统级各类MENU菜单学习笔记

   这几天小马在看官方文档的时候看到了有关系统级菜单Menu的文档,因为大家平时用的时候只是实现了两个方法来创建上下文菜单,小马也是的,特此写下这篇文章以备朋友们学习交流,供不时之用,吼吼,还有哦,今天是大年夜(代码是小马提前写的,一边看晚会一边发贴的,呵呵),小马祝大家:新年快乐,家人平安健康

    我们一般创建Menu菜单的时候是用以下方法:

@Override 

    public boolean onCreateOptionsMenu(Menu menu) { 

        super.onCreateOptionsMenu(menu); 

        return true; 

    } 

    @Override 

    public boolean onOptionsItemSelected(MenuItem item) { 

        return false; 

下面先看下小马的效果图,代码附效果图下:

方式一:普通方法实现的菜单

<a href="http://blog.51cto.com/attachment/201201/215210278.png" target="_blank"></a>

方式二:ActionProvider实现的效果

<a href="http://blog.51cto.com/attachment/201201/215315447.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201201/215333941.png" target="_blank"></a>

ActionProvider实现菜单项代码如下:

package com.xiaomaguo.www.test; 

import android.app.Activity; 

import android.content.Context; 

import android.content.Intent; 

import android.provider.Settings; 

import android.view.ActionProvider; 

import android.view.LayoutInflater; 

import android.view.Menu; 

import android.view.MenuItem; 

import android.view.View; 

import android.widget.ImageButton; 

import android.widget.Toast; 

/**   

* @Title: ActionBarSettingsActionProviderActivityActivity.java 

* @Package com.xiaomaguo.www.test 

* @Description: 系统级各类MENU菜单学习 

* @author MZH 

*/ 

public class ActionBarSettingsActionProviderActivityActivity extends Activity { 

    /** 

     * 这个方法不用多介绍,创建菜单 

     */ 

        //下面这个方法getMenuInflater()是从一个XML文件加载上下文菜单 

        getMenuInflater().inflate(R.menu.action_bar_settings_action_provider, menu); 

     * 给菜单加选中事件 

        //这里我们只简单的弹出一个提示,如果朋友们想知道自己单击了Menu的哪一项,可以item取Menu的id就可以啦,吼吼  

        Toast.makeText(this, R.string.action_bar_settings_action_provider_no_handling, 

                Toast.LENGTH_SHORT).show(); 

     *  

     * @Title: ActionBarSettingsActionProviderActivityActivity.java 

     * @Package com.xiaomaguo.www.test 

     * @Description: 完成中转实现 

     * @author MZH 

     * ActionProvider这个类的官方文档如下: 

     * This class is a mediator for accomplishing a given task,  

     * for example sharing a file. It is responsible for creating 

     *  a view that performs an action that accomplishes the task.  

     *  This class also implements other functions such a performing a default action 

     *  译文为: 

     *      这个类是关于完成给定的任务的中介,例如共享一个文件。负责创建一个视图,执行一个动作,完成这项任务, 

     *      这个类也可以实现其它的功能例如:默认动作的实现,吼吼 

    public static class SettingsActionProvider extends ActionProvider { 

        /** 这个意图是用来显示系统级设置的. */ 

        private static final Intent sSettingsIntent = new Intent(Settings.ACTION_SETTINGS); 

        /** Context for accessing resources. */ 

        private final Context mContext; 

        /** 

         * 构造方法 

         */ 

        public SettingsActionProvider(Context context) { 

            super(context); 

            mContext = context; 

        } 

         *重写ActionProvider类的方法,实现创建新的View 

        @Override 

        public View onCreateActionView() { 

            // Inflate the action view to be shown on the action bar. 

            LayoutInflater layoutInflater = LayoutInflater.from(mContext); 

            //从XML文件加载一个菜单布局 

            View view = layoutInflater.inflate(R.layout.action_bar_settings_action_provider, null); 

            ImageButton button = (ImageButton) view.findViewById(R.id.button); 

            button.setOnClickListener(new View.OnClickListener() { 

                @Override 

                public void onClick(View v) { 

                    mContext.startActivity(sSettingsIntent); 

                } 

            }); 

            return view; 

         * 创建一个可选或默认的动作 

        public boolean onPerformDefaultAction() { 

            mContext.startActivity(sSettingsIntent); 

            return true; 

     下面主要来看下菜单菜Menu文件代码,这个地方小马讲下,就是很奇怪的一点,官方文档上讲改变android:showAsAction值应该有变化的,可是小马改了,好像没看到太多变化,还有大家注意的一点,如果在ActionBar上面的选项如果超过两项时,多余的项的会自动添充到浮动的Menu中,不会因为项的项数很多页自动收缩到ActionBar哦,下面来看下代码:

&lt;?xml version="1.0" encoding="utf-8"?&gt; 

&lt;menu xmlns:android="http://schemas.android.com/apk/res/android" &gt; 

    &lt;!-- 这个地方小马总共就写了几个菜单项 以此来做为简单的示范: 

           因为选项都一样,小马就主要讲下里面的属性: 

         android:showAsAction :这个属性的值总共有五个一一对应分别为: 

         ifRoom -&gt; SHOW_AS_ACTION_IF_ROOM 

         never  -&gt; SHOW_AS_ACTION_NEVER 

         always -&gt;  SHOW_AS_ACTION_ALWAYS 

         withtext -&gt; SHOW_AS_ACTION_WITH_TEXT 

         collapseActionView -&gt; SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 

           因为文档中这四个选项的解释比较多,小马就不一一贴出来啦,想了解的朋友们可以跟下小马下面的链接: 

         http://developer.android.com/reference/android/view/MenuItem.html#SHOW_AS_ACTION_IF_ROOM 

          还有这个选项,在文档中也并不存在,写了还不报错 android:actionProviderClass  奇怪 

    --&gt; 

    &lt;item 

        android:id="@+id/menu_item_action_provider_action_bar" 

        android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider" 

        android:showAsAction="collapseActionView" 

        android:title="@string/action_bar_settings"/&gt; 

        android:id="@+id/menu_item_action_provider_overflow" 

        android:showAsAction="ifRoom" 

        android:id="@+id/menu_item_action_provider_overflow2" 

        android:id="@+id/menu_item_action_provider_overflow3" 

&lt;/menu&gt; 

    这篇文章是小马在学习菜单时参考官方文档记录的笔记,希望用到的时候可以查下自己的博客,有能用到的朋友们可以收藏下咯,吼吼,如果文章中有什么错误的地方,希望朋友们直接指出,批评小马的编码坏习惯,有错立马改,谢谢,最后,附上小DEMO的源码,有不足之外,大家多多见谅呀,嘿嘿

<a href="http://down.51cto.com/data/2359702" target="_blank">附件:http://down.51cto.com/data/2359702</a>

     本文转自华华世界 51CTO博客,原文链接:,http://blog.51cto.com/mzh3344258/767159如需转载请自行联系原作者

上一篇: java概述
下一篇: Java基础概述

继续阅读