你好 我正在使用Honeycomb android 3.0开发一个Android应用程序。我试着在Action Bar中显示一个菜单。菜单上有一个图标和斜角。当我们点击菜单项时,它会以下拉列表的形式显示其项目。下拉列表中的项目包含项目名称,但显示的是图标。我希望在单击菜单时出现的下拉列表中的标题旁边显示一个图标。任何人都可以帮我解决这个问题。我的xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/addserver"
android:icon="@android:drawable/ic_menu_add"
android:title="Add Server"
android:showAsAction="ifRoom|withText"
>
<menu>
<item android:id="@+id/fileserver"
android:icon="@android:drawable/ic_menu_add"
android:title="File Server"
android:onClick="onCreate"
android:showAsAction="always"/>
<item android:id="@+id/sharepoint"
android:icon="@android:drawable/ic_menu_add"
android:title="Share Point"
android:onClick="onCreate" />
</menu>
</item>
最初它会在左侧显示带有图标的添加服务器。点击它将显示fileserver,sharepoint作为下拉列表,带有out图标虽然我给了android:icon语句。
任何人都可以帮我解决这个问题吗?
在此先感谢,
答案 0 :(得分:10)
操作栏的溢出菜单中未显示图标的行为是设计(截至本文撰写时)。如果你绝对需要使用图标,你需要编写一个自定义实现考虑重新考虑你的设计以适应UI约定。
答案 1 :(得分:2)
实际上,有一种方法可以在菜单项的文本旁边添加图标:
final MenuItem menuItem=...
final ImageSpan imageSpan=new ImageSpan(this,R.drawable.ic_stat_app_icon);
final CharSequence title=" "+menuItem.getTitle();
final SpannableString spannableString=new SpannableString(title);
spannableString.setSpan(imageSpan,0,1,0);
menuItem.setTitle(spannableString);
这将在菜单项的开头放置一个图标,就在其原始文本之前。
顺便说一下,这也适用于PopupMenu。
答案 2 :(得分:1)
虽然最初的问题有点陈旧,而且因为推理反对在菜单中显示图标有点缺乏实质内容(参见Steven Elliott的优秀评论Displaying icon for menu items of Action Bar in Honeycomb android 3.0),我想指出一个出色的,有效的解决方案here:
@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(NoSuchMethodException e) { //...
} catch(Exception e) { // ...
}
}
}
return super.onMenuOpened(featureId, menu);
}
只需将此代码添加到您的活动中并导入相应的模块即可。再说一次,不是我的工作,而是工作。