Как добавить изображение с текстом в опции меню в Android?

Я пытаюсь реализовать настраиваемый параметр меню как с текстом, так и с изображением, которое выглядит так:

Снимок экрана меню

К сожалению, я не знаю, как это реализовать.

Мой menu.xml выглядит так:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.admin.ddcart.LIST">

    <item android:id="@+id/action_settings1"
        android:title="@string/action_settings1"
        android:orderInCategory="100" 
        app:showAsAction="never" />

    <item android:id="@+id/action_settings2"    
        android:title="@string/action_settings2"
        android:orderInCategory="100" 
        app:showAsAction="never" />

     <item android:id="@+id/action_settings3" 
         android:title="@string/action_settings3"
         android:orderInCategory="100" 
         app:showAsAction="never" />

</menu>

person Baskar P    schedule 25.08.2016    source источник
comment
используемый этот вопрос дублирует вопрос этой ссылки stackoverflow.com/a/28953241/5305430   -  person sushildlh    schedule 25.08.2016
comment
эти две другие ссылки, которые помогут вам android-dev-talk.blogspot.in/2012_05_20_archive.html и stackoverflow.com/a/28238747/5305430   -  person sushildlh    schedule 25.08.2016


Ответы (6)


Если ваше изображение находится в каталоге mipmap, используйте

android:icon=@mipmap/your_image"

Если ваше изображение находится в каталоге drawable, используйте

android:icon=@drawable/your_image"

для значков лучше добавить по четыре рисуемых каждый в

  • размер изображения drawable-hdpi 36 * 36
  • размер изображения drawable-mdpi 24 * 24
  • размер изображения drawable-xhdpi 48 * 48
  • размер изображения drawable-xxhdpi 72 * 72
  • размер изображения drawable-xxxdpi 96 * 96

Вы также можете использовать вектор

создать штраф с именем delete.xml в выпадающем каталоге

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:viewportHeight="24.0" android:viewportWidth="24.0" android:width="24dp">
    <path android:fillColor="#FFFFFF" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>

и в теге элемента используйте android:icon=@drawable/your_image"

Полный код

<item android:id="@+id/action_settings2"    
   android:title="@string/action_settings2"
   android:icon=@drawable/your_image"/>

Для создания png и вектора используйте этот плагин

Легко настраивайте цвет, размер и т. д. Создавайте png или vector

=> генерировать png всех размеров одним щелчком мыши

введите здесь описание изображения

person Vishwesh Jainkuniya    schedule 25.08.2016

Таким образом, вы можете установить значок в меню

http://keepsafe.github.io/2014/11/19/building-a-custom-overflow-menu.html

public void onClick(View v) {
    PopupMenu popupMenu = new PopupMenu(mContext, v);
    popupMenu.inflate(R.menu.album_overflow_menu);

    // Force icons to show
    Object menuHelper;
    Class[] argTypes;
    try {
        Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup");
        fMenuHelper.setAccessible(true);
        menuHelper = fMenuHelper.get(popupMenu);
        argTypes = new Class[] { boolean.class };
        menuHelper.getClass().getDeclaredMethod("setForceShowIcon", argTypes).invoke(menuHelper, true);
    } catch (Exception e) {
        // Possible exceptions are NoSuchMethodError and NoSuchFieldError
        //
        // In either case, an exception indicates something is wrong with the reflection code, or the 
        // structure of the PopupMenu class or its dependencies has changed.
        //
        // These exceptions should never happen since we're shipping the AppCompat library in our own apk, 
        // but in the case that they do, we simply can't force icons to display, so log the error and
        // show the menu normally.

        Log.w(TAG, "error forcing menu icons to show", e);
        popupMenu.show();
        return;
    }

    popupMenu.show();
}

Вывод введите здесь описание изображения

person Aditya Vyas-Lakhan    schedule 25.08.2016

Добавьте атрибут android:icon=@drawable/your_image" в тег элемента.

 <item android:id="@+id/action_settings2"    
       android:title="@string/action_settings2"
       android:icon=@drawable/your_image"/>

и вам нужно использовать счетчик, перейдите по этим ссылкам http://www.androidhive.info/2013/11/android-working-with-action-bar/

https://developer.android.com/guide/topics/ui/controls/spinner.html

person Deepak John    schedule 25.08.2016

Просто добавьте изображения как переменную icon в пункты меню.

 <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <group
            android:id="@+id/menu_top"
            android:checkableBehavior="single"
            >
            <item
                android:checked="true"
                android:id="@+id/drawer_gmail"
                android:icon="@drawable/gmail"
                android:title="Gmail"/>
            <item
                android:id="@+id/bluetooth"
                android:icon="@drawable/bluetooth"
                android:title="Bluetooth" >
            </item>
...
</group>


</menu>
person Android Geek    schedule 29.08.2016

Вы можете просто установить список в «меню», а затем с помощью java-кода создать специальный адаптер для раздувания «макета текста и изображения вместе». Создайте макет, который содержит изображение и текст, используйте свой специальный адаптер для надувания и передачи результата в список, чтобы у вас было меню, как вы хотите.

Если у вас возникла ошибка при выполнении этих комментариев ниже..

person Taha Sümer    schedule 29.08.2016

person    schedule
comment
Добро пожаловать в Stack Overflow. Не могли бы вы описать, как предоставленный код решает вопрос? - person tshimkus; 10.03.2019