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

Значок в меню не отображается в android

Я хочу добавить обработчик меню в свой проект. Я читал http://developer.android.com/guide/topics/ui/menus.html, это очень просто, но значок не отображается. Я очень смущен. Я даже добавил пункт меню программно.

Мой код:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, 0, 0, "Quit").setIcon(R.drawable.ic_launcher);
    getMenuInflater().inflate(R.layout.menu, menu);
    return true;
}

и в xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Single menu item 
         Set id, icon and Title for each menu item 
    -->
    <item android:id="@+id/menu_bookmark" 
          android:icon="@drawable/update"
          android:title="@string/Update" />

</menu>
4b9b3361

Ответ 1

Если вы используете свой код на Android 3.0+, значки в меню не отображаются по дизайну. Это дизайнерское решение от Google.

Подробнее об этом можно узнать в этом в блоге разработчиков Android.

Ответ 2

После длинной попытки я нашел ниже решение, которое могло бы помочь другим экономить там время. В принципе, решение, предоставляемое "lbarbosa", мне нравится искренне благодарить его.

Пробовал это на основе предыдущих ответов, и он отлично работает, по крайней мере, с более поздними версиями библиотеки поддержки (25.1):

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);

    if(menu instanceof MenuBuilder){
        MenuBuilder m = (MenuBuilder) menu;
        m.setOptionalIconsVisible(true);
    }

    return true;
}

Ответ 3

Независимо от того, какие варианты дизайна, сделанные системой, вы можете обойти это с помощью решения, представленного в верхнем ответе на этот вопрос

Код ниже для полноты. Протестировано на android.support.v7.app.ActionBarActivity

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

Ответ 4

Старый вопрос, но надеюсь, что это поможет кому-то.

используйте следующий код:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/menu_item_share"
    android:title="Share"
    app:showAsAction="always"
    android:icon="@drawable/share" /></menu>

note Я использовал app:showAsAction вместо android:showAsAction

Ответ 5

Вы можете добавить в свой XML файл атрибут android:showAsAction="always" внутри элемента элемента. Затем он отобразит соответствующий пункт меню в виде значка внутри панели действий.

Обратите внимание, что это будет вместо текста в меню.

Для дальнейшего чтения посмотрите здесь под андроид: showAsAction.

Ответ 6

Забудьте все, сделайте этот шаг. добавьте app:showsAsAction="always" к вашему элементу. Если вы используете android:showsAsAction="always", вы не получите решение. Попробуйте добавить атрибут app к вашему элементу.

Ответ 7

/* menu code */   
    <?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/one" android:title="one"
            android:icon="@mipmap/ic_launcher" app:showAsAction="always" />
        <item android:id="@+id/two" android:title="two"
            android:icon="@mipmap/ic_launcher" app:showAsAction="always" />
        <item android:id="@+id/three" android:title="three"
            android:icon="@mipmap/ic_launcher"  />
    </menu>
   /* Java code */

    @SuppressLint("RestrictedApi")
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.mymenu,menu);
            if(menu instanceof MenuBuilder){
                MenuBuilder m = (MenuBuilder) menu;
                m.setOptionalIconsVisible(true);
            }
            return true;
        }

Ответ 8

Работа с android.support.v7.app.AppCompatActivity делает ввод значков очень сложной задачей. Вам нужно реализовать onMenuOpen, супер метод из класса AppComactActivity. После этого проверьте, не является ли меню пустым. Если меню не является нулевым, передайте класс Method, как этот, и setOptionalIconsVisible в true с логическим значением.

@Override
public boolean onMenuOpened(int featureId, Menu menu) {

    if(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("MAIN", "onMenuOpened", e);
            }
            catch(Exception e){
                throw new RuntimeException(e);
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

Ответ 9

Просто добавьте этот атрибут в тег item в вашем menu.xml

Приложение: showAsAction = "всегда

Ответ 10

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, 0, 0, "androidDemo").setIcon(R.drawable.ic_launcher);
  getMenuInflater().inflate(R.layout.menu, menu);
  return true;
}

и в xml:

 

 <item android:id="@+id/menuUpdate"
  android:icon="@drawable/update_icon"
  android:title="@string/Update" 
  android:showAsAction="always"/>