这几天小马在看官方文档的时候看到了有关系统级菜单Menu的文档,因为大家平时用的时候只是实现了两个方法来创建上下文菜单,小马也是的,特此写下这篇文章以备朋友们学习交流,供不时之用,吼吼,还有哦,今天是大年夜(代码是小马提前写的,一边看晚会一边发贴的,呵呵),小马祝大家:新年快乐,家人平安健康
我们一般创建Menu菜单的时候是用以下方法:
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- return false;
- }
下面先看下小马的效果图,代码附效果图下:
方式一:普通方法实现的菜单
方式二:ActionProvider实现的效果
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 {
- /**
- * 这个方法不用多介绍,创建菜单
- */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- //下面这个方法getMenuInflater()是从一个XML文件加载上下文菜单
- getMenuInflater().inflate(R.menu.action_bar_settings_action_provider, menu);
- return true;
- }
- /**
- * 给菜单加选中事件
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- //这里我们只简单的弹出一个提示,如果朋友们想知道自己单击了Menu的哪一项,可以item取Menu的id就可以啦,吼吼
- Toast.makeText(this, R.string.action_bar_settings_action_provider_no_handling,
- Toast.LENGTH_SHORT).show();
- return false;
- }
- /**
- *
- * @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;
- }
- /**
- * 创建一个可选或默认的动作
- */
- @Override
- 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"/>
- <item
- android:id="@+id/menu_item_action_provider_overflow"
- android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"
- android:showAsAction="ifRoom"
- android:title="@string/action_bar_settings"/>
- <item
- android:id="@+id/menu_item_action_provider_overflow2"
- android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"
- android:showAsAction="ifRoom"
- android:title="@string/action_bar_settings"/>
- <item
- android:id="@+id/menu_item_action_provider_overflow3"
- android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"
- android:showAsAction="ifRoom"
- android:title="@string/action_bar_settings"/>
- </menu>
这篇文章是小马在学习菜单时参考官方文档记录的笔记,希望用到的时候可以查下自己的博客,有能用到的朋友们可以收藏下咯,吼吼,如果文章中有什么错误的地方,希望朋友们直接指出,批评小马的编码坏习惯,有错立马改,谢谢,最后,附上小DEMO的源码,有不足之外,大家多多见谅呀,嘿嘿
附件:http://down.51cto.com/data/2359702
本文转自华华世界 51CTO博客,原文链接:,http://blog.51cto.com/mzh3344258/767159如需转载请自行联系原作者