文档章节

android菜单Menu添加Icon无效问题(android4.0)

姬鑫
 姬鑫
发布于 2014/05/06 09:49
字数 449
阅读 2061
收藏 5
点赞 1
评论 0

    在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的。这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,该类的部分源码如下:  

  1. public class MenuBuilder implements Menu {  

  2. ...  

  3. private boolean mOptionalIconsVisible = false;  

  4. ....  

  5.     void setOptionalIconsVisible(boolean visible) {  

  6.         mOptionalIconsVisible = visible;  

  7.     }  

  8.   

  9.     boolean getOptionalIconsVisible() {  

  10.         return mOptionalIconsVisible;  

  11.     }  

  12. ...  

  13. }  


       上面的代码中,mOptionalIconsVisible成员初始值默认为false,这就是为什么给菜单设置图标没有效果的原因;所以,只要我们在创建菜单时通过调用setOptionalIconsVisible方法设置mOptionalIconsVisible为true就可以了;这时候问题来了,要想调用该方法,就需要创建MenuBuilder对象,但是,我们是无法在开发的应用程序中创建MenuBuilder这个对象的(MenuBuilder为系统内部的框架类);

         这时候就需要考虑用反射了,在代码运行创建菜单的时候通过反射调用setOptionalIconsVisible方法设置mOptionalIconsVisible为true,然后在给菜单添加Icon,这样就可以在菜单中显示添加的图标了

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

// getMenuInflater().inflate(R.menu.main, menu);

setIconEnable(menu,true);

menu.add(0, 0, 1, "姬鑫").setIcon(R.drawable.ic_launcher);

menu.add(0, 1, 2, "老大").setIcon(R.drawable.ic_launcher);

menu.add(0, 2, 3, "老二").setIcon(R.drawable.ic_launcher);

menu.add(0, 3, 4, "老三").setIcon(R.drawable.ic_launcher);

return super.onCreateOptionsMenu(menu);

}

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();  

       }  

   }  




本文转载自:http://blog.csdn.net/stevenhu_223/article/details/9705173

共有 人打赏支持
姬鑫
粉丝 85
博文 54
码字总数 16632
作品 0
宁波
程序员
Android的onCreateOptionsMenu()创建菜单Menu详解

Android一共有三种形式的菜单: 1.选项菜单(optinosMenu) 2.上下文菜单(ContextMenu) 3.子菜单(subMenu) 其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的A...

娶到笨笨
2014/03/12
0
0
ym——Android仿QQ5.0侧滑菜单ResideMenu源码分析

AndroidResideMenu github:https://github.com/SpecialCyCi/AndroidResideMenu csdn:http://download.csdn.net/detail/cym492224103/7887801 先看看如何使用: 把项目源码下载下来导入工程,......

天下杰论
2014/11/13
0
0
android菜单详解一:概述

菜单是Activity的一个重要组成部分。它为用户操作提供了很爽的途径。Android提供了一个简单的框架来向程序中添加标准菜单 . 共有三种菜单: 选项菜单 一个activity的菜单项们的主要集合。当你...

晨曦之光
2012/03/12
0
0
Android 的菜单学习

Android系统里面有3种类型的菜单:options menu,context menu,sub menu。 options menu 按Menu键就会显示,用于当前的Activity。 它包括两种菜单项: 因为options menu在屏幕底部最多只能显...

鉴客
2011/08/02
943
0
Android ActionBar详解

关于ActionBar,相信大家并不陌生,但是真正能够熟练使用的也不是很多,这篇文章主要为大家详细介绍ActionBar的相关知识,ActionBar是在Android3.0中引入的概念,所以在2.x系统中使用ActionBar...

恰同学少年
2015/08/03
0
0
android 探索首选项框架 ListPreference

探索首选项框架 在深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景。假设你正在编写一个应用程序,它提供了一个搜索飞机航班的工具。而且,假...

sflfqx
2015/01/21
0
0
Android 底部菜单栏实现

虽然网上有很多底部菜单栏的实现方式,但是实现方式各种各样,很多也不符合自己的口味,所以还是总结下底部菜单栏的实现方式,以便以后方便查询使用 实现方式一:通过TabWidget实现 这种方式...

yumingxinli
2013/01/28
0
0
android多分辨率多屏幕密度下UI适配方案

前言 Android设计之初就考虑到了UI在多平台的适配,它本身提供了一套完善的适配机制,随着版本的发展适配也越来越精确,UI适配主要受平台两个因素的影响:屏幕尺寸(屏幕的像素宽度及像素高度...

geeksu
2014/08/20
0
0
Android之ActionBar学习

关于那个问题:是关于如何生成如下图所示之ActionBar效果: 其实就在官网上就有答案,自己疏忽再加上资料繁多。寻了许久,经过指点。终于找到: To enable split action bar, simply add uiO...

尼莫
2012/10/12
0
1
android菜单详解二:选项菜单

创建一个选项菜单 选项菜单里应该包含基本的activity动作和必须的导航条目 (例如,一个打开程序设置的菜单项). 选项菜单的菜单项有两种不同的选择方法,一是菜单项按钮,二是通过 Action Bar...

晨曦之光
2012/03/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统

expect脚本同步文件 更改权限 执行脚本 查看执行结果 expect eof需要加上,作用是等脚本命令执行完再进行退出 expect脚本指定host和要同步的文件 更改权限,执行脚本 构建文件分发系统 需求背...

Zhouliang6
30分钟前
1
0
Hive应用:外部分区表

Hive应用:外部分区表 介绍 Hive可以创建外部分区表。创建表的时候,分区要在建表语句中体现。建完之后,你不会在表中看到数据,需要进行分区添加,使用alter语句进行添加。然后数据才会显示...

星汉
40分钟前
2
0
点击Enter登录

1. 效果 2. 实现过程(记得引入jq文件) //6.回车事件 登录 $(function() { document.onkeydown = function(event) { var e = event || window.event || arguments.callee.caller.arguments......

Lucky_Me
45分钟前
1
0
点击菜单内容切换

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .menu{ height: 38px; background-color: #eeeeee; line-height: 38px; } .mao{ ......

南桥北木
今天
1
0
OSChina 周六乱弹 —— 妹子和游戏哪个更好玩

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享唐朝乐队的单曲《国际歌》 《国际歌》- 唐朝乐队 手机党少年们想听歌,请使劲儿戳(这里) @举个栗子- :日常祈雨 邪恶的大祭...

小小编辑
今天
522
6
流利阅读笔记32-20180721待学习

“人工智能”造假:只有人工,没有智能 Lala 2018-07-21 1.今日导读 当今社会,擅长单个方面的人工智能已经盛行,手机借助 AI 智慧防抖技术帮助大家拍出清晰照片,谷歌研发的 AI 助手将可以帮...

aibinxiao
今天
7
0
我的成长记录(一)

今天突然精神抖擞,在我的博客下新开一项分类>成长记录,专门记录每隔一段时间我的一点感悟吧。因为今天才专门花时间新开这样一个分类,所以以前有过的一些感悟没有记录下来,现在已经想不起...

dtqq
今天
1
0
机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
15
0
idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
2
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部