一、现在我给大家介绍两个不同版本的模拟器(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="100" android:showAsAction="never" android:icon="@android:drawable/ic_menu_send" android:background="#66FFFFFF" android:title="连接" /> <item android:id="@+id/disconnect" android:orderInCategory="100" android:showAsAction="never" android:icon="@android:drawable/ic_menu_close_clear_cancel" android:title="断开" /> <item android:id="@+id/search" android:orderInCategory="100" android:showAsAction="never" android:icon="@android:drawable/ic_menu_search" android:title="发现" /> <item android:id="@+id/view" android:orderInCategory="100" android:showAsAction="never" android:icon="@android:drawable/ic_menu_view" android:title="查看" /> <item android:id="@+id/help" android:orderInCategory="100" android:showAsAction="never" android:icon="@android:drawable/ic_menu_help" android:title="帮助" /> <item android:id="@+id/exit" android:orderInCategory="100" 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!这样的效果会更好。