天天看點

系統級各類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基礎概述

繼續閱讀