本文实现功能
A)为Android创建菜单
B)解决Android4.0菜单图片无法显示问题
1)效果图如下
2)实现代码如下
package com.example.androidapp;
import java.lang.reflect.Method;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
/*设置菜单*/
public boolean onCreateOptionsMenu(Menu menu) {
/* 利用反射机制调用MenuBuilder的setOptionalIconsVisible方法设置mOptionalIconsVisible为true,
* 给菜单设置图标时才可见
*/
setIconEnable(menu, true);
menu.add(0, 0, 0, "关于").setIcon(R.drawable.ic_launcher);
menu.add(0, 1, 1, "退出").setIcon(R.drawable.ic_launcher);
return super.onCreateOptionsMenu(menu);
}
//enable为true时,菜单添加图标有效,enable为false时无效。4.0系统默认无效
private void setIconEnable(Menu menu, boolean enable)
{
try{
Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(true);
//MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征)
m.invoke(menu, enable);
} catch (Exception e){
e.printStackTrace();
}
}
/*选择菜单触发事件*/
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case 0:
break;
case 1:
break;
}
return true;
}
}