android seticon方法,Android菜单不显示ICON解决方案

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

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

创建菜单方法:

@Override

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

return true;

}

@Override

public boolean

onMenuOpened(int featureId, Menu menu) {

if (featureId ==

Window.FEATURE_ACTION_BAR && menu != null)

{

if

(menu.getClass().getSimpleName().equals("MenuBuilder"))

{

try {

Method m =

menu.getClass().getDeclaredMethod(

"setOptionalIconsVisible",

Boolean.TYPE);

m.setAccessible(true);

m.invoke(menu,

true);

} catch (Exception e)

{

}

}

}

return

super.onMenuOpened(featureId, menu);

}

@Override

public boolean

onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method

stub

if(item.getItemId()==R.id.process){

ShowProcessListDialog();

}

return

super.onOptionsItemSelected(item);

}

private void

setOverflowShowingAlways() {

// TODO Auto-generated method

stub

try {

ViewConfiguration config =

ViewConfiguration.get(this);

Field menuKeyField =

ViewConfiguration.class

.getDeclaredField("sHasPermanentMenuKey");

menuKeyField.setAccessible(true);

menuKeyField.setBoolean(config,

false);

} catch (Exception e)

{

e.printStackTrace();

}

}

菜单布局文件:main.xml

android:id="@+id/process"

android:orderInCategory="100"

android:showAsAction="always"

android:icon="@drawable/processmenu_selector"

android:title="@string/menu_schedule"/>

android:icon="@drawable/menu_settingphone"

android:title="@string/menu_settingphone"/>

android:icon="@drawable/menu_settingphone"

android:title="@string/menu_Exit"/>

android:icon="@drawable/menu_settingphone"

android:title="@string/menu_Update"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值