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

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

Возможно ли это?

Solutions Collecting From Web of "Как показывать значки в меню переполнения ActionBar?"

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

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

На самом деле есть простой способ добиться этого, поскольку то, что вы видите на самом деле 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 «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 может придумать свою смешную патч-патч для Action Bar.

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

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

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

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

Немного обсуждать эту тему см. Здесь:

  • Отображение значка для пунктов меню панели действий в Honeycomb android 3.0

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