Android Menu功能菜单

本文介绍如何在Android应用中创建带有图标的菜单,并提供了解决Android 4.0及以上版本菜单图标不显示的问题的方法。通过使用反射机制调用MenuBuilder的setOptionalIconsVisible方法,使菜单图标在所有Android版本上都能正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实现功能

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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值