首页 文章

在溢出下拉菜单项上显示自定义布局? Android的

提问于
浏览
10

我试图弄清楚如何在溢出菜单(动作栏右侧)中显示项目的自定义视图,但我似乎无法弄明白 . 它仍然只显示 Headers :S . 我想做一些事情,比如twitter如何在下拉菜单的第一项中显示图标, Headers 和副 Headers . 谁能帮我吗

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类#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();
    }
}

2 回答

  • 10

    我在如何列出溢出菜单中的自定义行时遇到了同样的问题 . 遗憾的是,网上关于自定义操作栏的内容并不多 . 如果要在超流菜单中列出仅包含图标和 Headers 的项目,则需要在项目中嵌套项目 . 我是这样做的:

    <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

    以下是我的问题的参考:

    link

    我希望它可以帮助你 .

  • 1

    如果你只想在文本后添加一个drawable(红点),你可以使用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);
    

相关问题