我想在溢出下拉菜单中显示菜单项标题以外的图标。
有可能吗?
答案 0 :(得分:32)
将您的菜单设置为属性android:showAsAction="always"
,并在菜单的xml文件中添加子菜单,就像您的菜单一样
<item
android:id="@+id/mainMenu"
android:icon="@drawable/launcher"
android:showAsAction="always">
<menu>
<item
android:id="@+id/menu_logout"
android:icon="@drawable/log_out"
android:title="logout"/>
</menu>
</item>
这将显示菜单中的图标
答案 1 :(得分:4)
实际上有一种简单的方法可以实现它,因为你看到的实际上是一个TextView,所以你设置了一个跨度,例如:
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);
这将在菜单项的开头放置一个图标,就在其原始文本之前。
答案 2 :(得分:3)
也许你和我有同样的问题。所以对我来说,如果你使用的是AppCompat就很容易使用这个属性:
android:showAsAction="always"
改为使用它:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/option"
android:title="@string/option"
android:icon="@drawable/option"
app:showAsAction="always">
</item>
</menu>
adgyal xmlns:app 和 showAsAction 是 app 的属性。
希望它有所帮助。
答案 3 :(得分:2)
讨厌这样的答案,但我不够好,无法给出更好的答案。
菜单溢出项的图标是子菜单行“subMenu2Item.setIcon(R.drawable.ic_launcher);” 只需将ic_launcher替换为您的图标文件(在程序的res drawable目录中)。 希望你的意思是使用ActionBarSherlock。
行subMenu1Item.setIcon(R.drawable.ic_launcher);用于顶部菜单按钮的ActionBar图标。
回应“这不可能通过设计”
非常感谢谷歌试图接管世界并让我们骑着它的外套尾巴,但是...谷歌太不稳定而不是因为不一致而变得脾气暴躁。 如果谷歌可以为他们提供的每一套“API”做一个例子,那就太好了。有代码的API引用,但没有关于如何将它们放在一起的示例,可以作为APK运行的完整工作示例是我想要的。我可以从那里骗过它。如果他们可以花时间编写APK,那么在标准模板上编写一个小例子会有多难?对于30%的一切,要求的并不多。 我当天和微软有过同样的争论,但当时也没有。因此,你得到stackoverflow。 :)令人遗憾的是,需要一些人(杰克沃顿的摇滚乐队)独立工作,用一个向后兼容的动作栏做得更好,而谷歌可以拿出它荒谬的Action Bar Patch thingy。
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
SubMenu subMenu1 = menu.addSubMenu("Action Item");
subMenu1.add("Help");
subMenu1.add("About");
MenuItem subMenu1Item = subMenu1.getItem();
subMenu1Item.setIcon(R.drawable.ic_launcher);
subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
SubMenu subMenu2 = menu.addSubMenu("All Options");
subMenu2.add("Help");
subMenu2.add("About");
MenuItem subMenu2Item = subMenu2.getItem();
subMenu2Item.setIcon(R.drawable.ic_launcher);
return super.onCreateOptionsMenu(menu);
}
答案 4 :(得分:2)
@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){
Log.e(TAG, "onMenuOpened", e);
}
catch(Exception e){
throw new RuntimeException(e);
}
}
}
return super.onMenuOpened(featureId, menu);
}
答案 5 :(得分:1)
这在设计上是不可能的(至少在HC中 - 我在API 16上开发并且也没有获得图标)。谷歌不希望我们这样做。
有关该主题的一些讨论,请参阅此处的相关答案:
正如其中一条评论所暗示的,如果您需要图标,请考虑使用下拉菜单,而不是溢出菜单。