显示了操作栏的菜单项图标在蜂巢的Android 3.0显示了操作栏的菜单项图标在蜂巢的Android

2019-05-12 03:52发布


我使用的蜂巢Android 3.0的开发Android应用程序。 我tryig显示在操作栏菜单。 菜单上有图标和本标题。 当我们在一个下拉列表的形式,点击它会显示其项目的菜单项。它在下拉与项目名称列表中的项目,但用了图标则显示。 我要显示的标题在下拉列表中,当我点击菜单出现旁边的图标。 谁能帮我整理出这个问题。 我的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>

最初,它显示与图标添加服务器上离开。 点击会显示文件服务器,SharePoint中作为下拉列表与出图标虽然我给出的Android:图标声明。
谁能帮我整理出这个问题?
提前致谢,

Answer 1:

其中,图标不会操作栏中的溢出菜单中显示的行为是通过设计(在本文写作)。 如果你绝对需要使用的图标, 你需要编写一个自定义的实现考虑重新考虑你的设计,以适应UI约定。



Answer 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的工作。



Answer 3:

虽然原来的问题是有点老,而且,由于在菜单中显示图标的推理是有所欠缺的物质(见史蒂芬艾略特的优秀句话在蜂巢Android 3.0的显示为操作栏的菜单项的图标 ),我想指出一个伟大的,工作的解决方案,给出这里 :

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

只需将此代码添加到您的活动,并导入相应的模块。 同样,不是我的工作,但工作没有少。



文章来源: Displaying icon for menu items of Action Bar in Honeycomb android 3.0