这几天小马在看官方文档的时候看到了有关系统级菜单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如需转载请自行联系原作者