Подтвердить что ты не робот

Как показывать значки в меню переполнения ActionBar?

Я хочу отобразить значок в дополнение к названию элемента меню в раскрывающемся меню переполнения.

Возможно ли?

4b9b3361

Ответ 1

поместите свое меню с свойством 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>

это покажет значки в меню

Ответ 2

На самом деле есть простой способ добиться этого, поскольку то, что вы видите на самом деле 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);

Это поместит значок в начале пункта меню прямо перед его исходным текстом.

Ответ 3

Ненавижу такие ответы, но я недостаточно хорош, чтобы дать лучший ответ.

Значок элементов переполнения для меню - строка подменю2 "subMenu2Item.setIcon(R.drawable.ic_launcher);" просто замените ic_launcher вашим файлом значка (в папке res resable вашей программы). Надеюсь, вы имеете в виду использование ActionBarSherlock.

Строка subMenu1Item.setIcon(R.drawable.ic_launcher); для значка ActionBar для кнопки "Меню" вверху.

в ответ на "Это невозможно по дизайну"

Огромное спасибо Google за то, что она пытается захватить мир и позволить нам кататься на нем пальто, НО... Google слишком непоследователен, чтобы быть взволнованным по поводу несоответствий. Было бы неплохо, если бы Google мог сделать пример для КАЖДОГО "набора" API, которые они предлагают. Есть ссылки API на код, но нет примера о том, как их собрать. Весь полностью рабочий пример, который можно запустить как APK, - это все, что я хочу. Я могу обмануть его оттуда. Если они могут потратить время на то, чтобы написать APK, насколько сложнее было бы составить небольшой пример стандартного шаблона? За 30% всего, о чем не просить. У меня был такой же аргумент с Microsoft в тот день, и этого не произошло. И таким образом, и вы получаете stackoverflow.:) Стыдно, что какой-то парень (рок на Джейке Уортоне) работает самостоятельно, чтобы лучше работать с обратной совместимой панелью действий, чем Google может придумать свою нелепую патч-патч.

@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

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

Ссылка: Как показать значки в меню переполнения в ActionBar

Ответ 5

Возможно, у вас такая же проблема, как и я. Поэтому для меня решение было легко, если вы используете 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> 

Есть разница в aditional xmlns: app и showAsAction - это свойство приложения.

Надеюсь, что это поможет кому-то.

Ответ 6

Это невозможно по дизайну (по крайней мере, в HC - и я разрабатываю API 16 и не получаю никаких иконок). Google не хочет, чтобы мы это делали.

Для обсуждения этой темы см. соответствующий ответ здесь:

Как следует из одного из комментариев, если вам нужны значки, рассмотрите возможность использования выпадающего меню, а не меню переполнения.