Отображение иконки для пунктов меню Action Bar в Honeycomb android 3.0 - PullRequest
6 голосов
/ 07 марта 2011

привет
Я занимаюсь разработкой приложения для Android с использованием Honeycomb android 3.0.Я пытаюсь отобразить меню в панели действий.В меню есть значок и наклон.Когда мы щелкаем пункт меню, он отображает его элементы в форме выпадающего списка. Это были элементы в выпадающем списке с именами элементов, но без значка, который он отображает.Я хочу, чтобы рядом с заголовком отображался значок в раскрывающемся списке, который появляется при нажатии на меню.Может кто-нибудь помочь мне разобраться в этом вопросе.Мой 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: icon Statement.
Может кто-нибудь помочь мне разобраться с этой проблемой?
Заранее спасибо,

Ответы [ 3 ]

10 голосов
/ 07 марта 2011

Поведение, при котором значки не отображаются в меню переполнения панели действий, является заданным (на момент написания статьи).Если вам абсолютно необходимо использовать значки, вам нужно написать собственную реализацию , подумайте о переосмыслении вашего дизайна в соответствии с соглашениями UI.

2 голосов
/ 24 мая 2014

На самом деле, есть способ поместить значки рядом с текстом для пунктов меню:

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.

1 голос
/ 16 сентября 2014

Хотя исходный вопрос несколько устарел и более того, потому что аргументация против показа значков в меню несколько лишена смысла (см. Превосходное замечание Стивена Эллиотта Отображение значка для пунктов меню панели действий вHoneycomb 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);
}

Просто добавьте этот код в свою деятельность и импортируйтесоответствующие модули.Опять же, не моя работа, но работа тем не менее.

...