Отображение персонализированного макета при выпадающем меню переполнения? Android

Я пытаюсь понять, как показать пользовательский вид элементов внутри меню переполнения (справа от панели действий), но я не могу понять это. Он по-прежнему показывает только название: S. Я хочу сделать что-то вроде того, как твиттер должен показывать значок, заголовок и субтитры в первом элементе в выпадающем меню. Может ли кто-нибудь помочь мне?

Элемент в Menu.xml

<item
    android:id="@+id/action_dropdown"
    android:icon="@drawable/ic_action_overflow"
    android:actionProviderClass="efwefwef.com.actionbar.ABDropDown"
    android:title=""
    android:showAsAction="always">
</item>

actionProvider Class # 1

public class ABDropDown extends ActionProvider  {
    private static final String TAG = "MActionProvider";
    private Context context;

    public ABDropDown(Context context) {
        super(context);
        this.context = context;
    }

    @Override
    public View onCreateActionView() {
        return null;
    }

    @Override
    public boolean hasSubMenu() {
        Log.d(TAG, "hasSubMenu");
        return true;
    }


    @Override
    public boolean onPerformDefaultAction() {
        Log.d(TAG, "onPerformDefaultAction");
        return super.onPerformDefaultAction();
    }

    @Override
    public void onPrepareSubMenu(SubMenu subMenu) {
        subMenu.clear();
        subMenu.add("Profile").setActionProvider(new ABDropDownProfile(context));
        subMenu.add(Menu.NONE, Menu.NONE, 2, "Mezz 2");

    }

}

Второй класс ActionProvider для элемента, который я хочу показать пользовательский вид

public class ABDropDownProfile extends ActionProvider  {
    private static final String TAG = "MActionProvider";
    private Context context;

    public ABDropDownProfile(Context context) {
        super(context);
        this.context = context;
    }

    @Override
    public View onCreateActionView() {
        View view = View.inflate(context, R.layout.actionbar_viewprofile, null);

        return view;
    }

    @Override
    public boolean hasSubMenu() {
        return false;
    }


    @Override
    public boolean onPerformDefaultAction() {
        Log.d(TAG, "onPerformDefaultAction");
        return super.onPerformDefaultAction();
    }
}

Ответ 1

Я столкнулся с такой же проблемой, как перечислять пользовательские строки в меню переполнения. К сожалению, в настройках панелей действий мало что можно найти в Интернете. Если вы хотите перечислить элементы с помощью только значка и заголовка в меню перетока, вам нужно сделать вложенность элементов внутри элементов. Я сделал это так:

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

    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/ic_action_overflow"
        android:orderInCategory="100"
        android:showAsAction="always">
        <menu>
            <item
                android:id="@+id/add_source"
                android:icon="@drawable/add_on"
                android:orderInCategory="100"
                android:showAsAction="never"
                android:title="@string/add_source"/>
            <item
                android:id="@+id/channel_setup"
                android:icon="@drawable/channelsetup_on"
                android:orderInCategory="100"
                android:showAsAction="never"
                android:title="@string/channel_setup"/>
        </menu>
    </item>

    <item
        android:id="@+id/time"
        android:orderInCategory="99"
        android:showAsAction="always"
        android:title="@string/time_title"/>
    <item
        android:id="@+id/weather"
        android:icon="@drawable/ic_action_cloud"
        android:orderInCategory="98"
        android:showAsAction="always"
        android:title="@string/weather_title"/>
    <item
        android:id="@+id/search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_action_search"
        android:orderInCategory="97"
        android:showAsAction="collapseActionView|always"
        android:title="@string/search_title"/>

</menu>

для достижения этой цели:

enter image description here

И вот ссылка на мой вопрос:

ссылка

Надеюсь, это поможет вам.

Ответ 2

Если вы просто хотите добавить рисоваемую (красную точку) после текста, вы можете использовать imageSpan для добавления drawable после основного текста, как показано ниже:

private MenuItem settingsItem;
    ....
    SpannableStringBuilder builder = new SpannableStringBuilder(getString(R.string.settings_menu_name) + " .");
    Drawable drawable = getResources().getDrawable(R.drawable.red_dot);
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    builder.setSpan(new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE), builder.length()-1, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    settingsItem.setTitle(builder);