這幾天小馬在看官方文檔的時候看到了有關系統級菜單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哦,下面來看下代碼:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 這個地方小馬總共就寫了幾個菜單項 以此來做為簡單的示範:
因為選項都一樣,小馬就主要講下裡面的屬性:
android:showAsAction :這個屬性的值總共有五個一一對應分别為:
ifRoom -> SHOW_AS_ACTION_IF_ROOM
never -> SHOW_AS_ACTION_NEVER
always -> SHOW_AS_ACTION_ALWAYS
withtext -> SHOW_AS_ACTION_WITH_TEXT
collapseActionView -> SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
因為文檔中這四個選項的解釋比較多,小馬就不一一貼出來啦,想了解的朋友們可以跟下小馬下面的連結:
http://developer.android.com/reference/android/view/MenuItem.html#SHOW_AS_ACTION_IF_ROOM
還有這個選項,在文檔中也并不存在,寫了還不報錯 android:actionProviderClass 奇怪
-->
<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"/>
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"
</menu>
這篇文章是小馬在學習菜單時參考官方文檔記錄的筆記,希望用到的時候可以查下自己的部落格,有能用到的朋友們可以收藏下咯,吼吼,如果文章中有什麼錯誤的地方,希望朋友們直接指出,批評小馬的編碼壞習慣,有錯立馬改,謝謝,最後,附上小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如需轉載請自行聯系原作者