一、现在我给大家介绍两个不同版本的模拟器(2.3.3和4.0.3)

1、布局文件

  (1)打开“res/layout/activity_main.xml”文件。

先看mian布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> </RelativeLayout>

(2)打开“res/menu/main.xml”文件。  输入以下代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/connect"
android:orderInCategory=""
android:showAsAction="never"
android:icon="@android:drawable/ic_menu_send"
android:background="#66FFFFFF"
android:title="连接" /> <item android:id="@+id/disconnect"
android:orderInCategory=""
android:showAsAction="never"
android:icon="@android:drawable/ic_menu_close_clear_cancel"
android:title="断开" /> <item android:id="@+id/search"
android:orderInCategory=""
android:showAsAction="never"
android:icon="@android:drawable/ic_menu_search"
android:title="发现" /> <item android:id="@+id/view"
android:orderInCategory=""
android:showAsAction="never"
android:icon="@android:drawable/ic_menu_view"
android:title="查看" /> <item android:id="@+id/help"
android:orderInCategory=""
android:showAsAction="never"
android:icon="@android:drawable/ic_menu_help"
android:title="帮助" /> <item android:id="@+id/exit"
android:orderInCategory=""
android:showAsAction="never"
android:icon="@android:drawable/ic_menu_revert"
android:title="退出" /> </menu>

2、程序文件 

  打开“src/com.genwoxue.optionsmenu/MainActivity.java”文件。

  然后输入以下代码:

package com.example.optionmenu1;

import android.content.Context;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.InflateException;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = new MenuInflater(getApplicationContext());
inflater.inflate(R.menu.main, menu);
setMenuBackground();
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
String info = "";
switch (item.getItemId()) {
case R.id.connect:
info = "connect";
break;
case R.id.disconnect:
info = "disconnect";
break;
case R.id.exit:
info = "exit";
break;
case R.id.help:
info = "Help";
break;
case R.id.search:
info = "search";
break;
case R.id.view:
info = "view";
break;
default:
info = "NULL";
break;
}
Toast toast = Toast.makeText(this, info, Toast.LENGTH_SHORT);
toast.show();
return super.onOptionsItemSelected(item);
}
// 关键代码为重写Layout.Factory.onCreateView()方法自定义布局
protected void setMenuBackground() {
MainActivity.this.getLayoutInflater().setFactory(new android.view.LayoutInflater.Factory() {
/**
* name - Tag name to be inflated.<br/>
* context - The context the view is being created in.<br/>
* attrs - Inflation attributes as specified in XML file.<br/>
*/
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
// 指定自定义inflate的对象
if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
try {
LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);//尝试创建我们自己的布局
new Handler().post(new Runnable() {
public void run() {
// 设置背景图片
view.setBackgroundResource(R.drawable.ic_launcher);
}
});
return view;
} catch (InflateException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
});
}
}

3、运行结果

(1)2.3.3模拟器运行结果

(2)4.0.3模拟器运行结果

(3)、如果你已经习惯了Android2.x版本的样式,你一定会怀疑是不是搞错了,这是OptionsMenu菜单吗?

  一点不错,Android4.0菜单就变成这个样式了!如果你想要以前2.3.3版本样式,我们在<activity ……></activity>中添加了android:theme="@android:style/Theme"之后,我们再来看一下效果。只是全变成黑色。

如果你想改变menu的背景颜色,你可以去问度娘。。。

补充说明:

  Android4.0及以上版本,更推荐你使用ActionBar和PopupWindow!这样的效果会更好。

android之OptionMenu的更多相关文章

  1. Android:OptionMenu

    MainActivity: package com.example.optionmenu; import android.content.Intent; import android.os.Bundl ...

  2. Android 菜单(OptionMenu)

    菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 一.概述 ...

  3. 【转】Android 菜单(OptionMenu)大全 建立你自己的菜单--不错

    原文网址:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html 菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中, ...

  4. Android 菜单(OptionMenu)大全 建立你自己的菜单

    转自:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html 菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单 ...

  5. Android 动态控制OptionMenu的显示与隐藏

    在有些场景下,可能需要动态的显示和隐藏optionmenu,可以这样实现:如果在activity中默认实现了方法: onCreateOptionsMenu(Menu menu) 那么该OptionMe ...

  6. OptionsMenu

    菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是O ...

  7. Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)

    菜单的概念,现在已经很普及了.Windows系统.Mac.桌面版Linux.Java Swing等,都有可视化菜单.一.Android平台3种菜单  选项菜单(OptionMenu).上下文菜单(Co ...

  8. Android OptionMenu

    1.Java package com.fish.helloworld; import android.app.Activity; import android.content.Context; imp ...

  9. android 为activity添加optionMenu选项菜单

    <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android: ...

随机推荐

  1. iOS 推送通知处理

    //这是程序杀死后再通过点击通知进入时调用的方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  2. Deep Learning 7_深度学习UFLDL教程:Self-Taught Learning_Exercise(斯坦福大学深度学习教程)

    前言 理论知识:自我学习 练习环境:win7, matlab2015b,16G内存,2T硬盘 练习内容及步骤:Exercise:Self-Taught Learning.具体如下: 一是用29404个 ...

  3. iOS开发 Masonry的简单使用

    首先,在正式使用Masonry之前,我们先来看看在xib中我们是如何使用AutoLayout     从图中我们可以看出,只要设置相应得局限,控制好父视图与子视图之间的关系就应该很ok的拖出你需要的需 ...

  4. 错误overlay id is not a dependency project原因分析

    之前按下面配置,一直会报标题中错误,有的同学说改成<overlay><id></id></overlay>就可以了,然而我这里竟然错误依旧. 奇怪的是间 ...

  5. display:inline 和display:inline-block和display:block的区别

    之前讲过块级元素使用display:block 行内元素使用display:inline 那么今天我们就来区分一下display:inline,display:inline-block和display ...

  6. Js 冒泡事件阻止

    Js 冒泡事件阻止   1. 事件目标 现在,事件处理程序中的变量event保存着事件对象.而event.target属性保存着发生事件的目标元素.这个属性是DOM API中规定的,但是没有被所有浏览 ...

  7. github 使用教程初级版

    github 是一个基于 git 的代码托管平台,付费用户可以建私人仓库,免费用户只能使用公共仓库.对于一般人来说公共仓库就已经足够了,而且也没多少代码来管理.下面简单介绍如何使用 github,供初 ...

  8. scala学习笔记

    一 入门 为了增加编程趣味和技能,学习新语言,体会函数式编程和简易的并发管理模型,了解日渐活跃的Spark,尝试下Scala.Scala = Scalable language,作者是Martin O ...

  9. css伪元素选择器(伪对象选择器)checked + 伪元素练习

    伪对象也叫伪元素,在过去,伪类和伪元素都被书写成前面只加一个冒号,实际上应该是: :weilei ::伪元素 而现在我们为了兼容旧的书写方式,用一个冒号引导伪类也是能被解析的. 伪类一般反应无法在CS ...

  10. .htaccess应该放在哪里?

    根据 Apache 官方的介绍,.htaccess 文件属于分布式配置文件,可以放置在网站 www 根目录的所有子目录.以及 www 根目录的上一级目录中,生效的路径总是当前目录及其所有子目录(可在文 ...