如何创建自定义popupMenu的机器人 [英] How to create a custom PopupMenu in Android

查看:146
本文介绍了如何创建自定义popupMenu的机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎么能复制像我Balsamiq做以下?

我做了这个菜单,但它只是显示的项目(未图标)的文字。是否有可能显示一个PopupMenu的标题和图标?

下面是我的 create_post_menu.xml

 < XML版本=1.0编码=UTF-8&GT?;

<菜单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>

    <项目
        机器人:ID =@ + ID / action_photo
        机器人:图标=@可绘制/ ic_action_camera
        机器人:标题=@字符串/ action_photo
        机器人:showAsAction =永远| withText/>

    <项目
        机器人:ID =@ + ID / action_video
        机器人:图标=@可绘制/ ic_action_video
        机器人:标题=@字符串/ action_video
        机器人:showAsAction =永远| withText/>

    <项目
        机器人:ID =@ + ID / action_text
        机器人:图标=@可绘制/ ic_action_edit
        机器人:标题=@字符串/ action_text
        机器人:showAsAction =永远| withText/>

    <项目
        机器人:ID =@ + ID / ACTION_LINK
        机器人:图标=@可绘制/ ic_action_web_site
        机器人:标题=@字符串/ ACTION_LINK
        机器人:showAsAction =永远| withText/>

< /菜单>
 

修改

下面是我的 onCreateOptionsMenu onOptionsItemSelected 方法:

  @覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    MenuInflater充气= getMenuInflater();
    inflater.inflate(R.menu.main,菜单);
    返回super.onCreateOptionsMenu(菜单);
}

@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    如果(item.getItemId()== R.id.action_new){
        查看menuItemView = findViewById(R.id.action_new);
        PopupMenu的弹出菜单=新的PopupMenu的(这一点,menuItemView);
        popupMenu.inflate(R.menu.create_post_menu);
        popupMenu.show();
        返回true;
    }否则,如果(item.getItemId()== R.id.action_search){
        返回true;
    }否则,如果(item.getItemId()== R.id.action_settings){
        startActivity(新意图(MainActivity.this,SettingsActivity.class));
        返回true;
    }否则,如果(item.getItemId()== R.id.action_help){
        返回true;
    } 其他 {
        返回super.onOptionsItemSelected(项目);
    }
}
 

解决方案

我简单地把解决这个问题的 create_post_menu 项里面的图标是一个 +

例如,我有(使用AppCompat):

 <菜单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:程序=htt​​p://schemas.android.com/apk/res-auto>

    <项目
            机器人:ID =@ + ID / action_new
            机器人:图标=@可绘制/ ic_action_new
            机器人:标题=@字符串/ action_new
            应用程序:showAsAction =总是>

            <菜单>

                <项目
                    机器人:ID =@ + ID / action_photo
                    机器人:图标=@可绘制/ ic_action_camera
                    机器人:标题=@字符串/ action_photo
                    应用程序:showAsAction =永远| withText/>
                <项目
                    机器人:ID =@ + ID / action_video
                    机器人:图标=@可绘制/ ic_action_video
                    机器人:标题=@字符串/ action_video
                    应用程序:showAsAction =永远| withText/>
                <项目
                    机器人:ID =@ + ID / action_text
                    机器人:图标=@可绘制/ ic_action_text
                    机器人:标题=@字符串/ action_text
                    应用程序:showAsAction =永远| withText/>
                <项目
                    机器人:ID =@ + ID / action_place
                    机器人:图标=@可绘制/ ic_action_place
                    机器人:标题=@字符串/ action_place
                    应用程序:showAsAction =永远| withText/>
                <项目
                    机器人:ID =@ + ID / action_more
                    机器人:标题=@字符串/ action_more
                    机器人:可见=假
                    应用程序:showAsAction =永远| withText/>

            < /菜单>
        < /项目>
        ...(更多菜单这里项)
< /菜单>
 

没有AppCompat,你可以只得到通过<$ C $替换应用摆脱了XML命名空间应用的C>机器人。

How can I replicate something like I made below in Balsamiq?

I made this menu, but it is only displaying the text of the items (not the icons). Is it possible to display both the title and icon in a PopupMenu?

Here is my create_post_menu.xml

<?xml version="1.0" encoding="utf-8"?>

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

    <item
        android:id="@+id/action_photo"
        android:icon="@drawable/ic_action_camera"
        android:title="@string/action_photo"
        android:showAsAction="always|withText" />

    <item
        android:id="@+id/action_video"
        android:icon="@drawable/ic_action_video"
        android:title="@string/action_video"
        android:showAsAction="always|withText" />

    <item
        android:id="@+id/action_text"
        android:icon="@drawable/ic_action_edit"
        android:title="@string/action_text"
        android:showAsAction="always|withText" />

    <item
        android:id="@+id/action_link"
        android:icon="@drawable/ic_action_web_site"
        android:title="@string/action_link"
        android:showAsAction="always|withText" />

</menu>

Edit

Here are my onCreateOptionsMenu and onOptionsItemSelected methods:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.action_new) {
        View menuItemView = findViewById(R.id.action_new);
        PopupMenu popupMenu = new PopupMenu(this, menuItemView);
        popupMenu.inflate(R.menu.create_post_menu);
        popupMenu.show();
        return true;
    } else if(item.getItemId() == R.id.action_search) {
        return true;
    } else if(item.getItemId() == R.id.action_settings) {
        startActivity(new Intent(MainActivity.this, SettingsActivity.class));
        return true;
    } else if(item.getItemId() == R.id.action_help) {
        return true;
    } else {
        return super.onOptionsItemSelected(item);
    }
}

解决方案

I resolved this issue by simply putting the create_post_menu inside of the item whose icon is a +.

For example, I have (using AppCompat):

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

    <item
            android:id="@+id/action_new"
            android:icon="@drawable/ic_action_new"
            android:title="@string/action_new"
            app:showAsAction="always">

            <menu>

                <item
                    android:id="@+id/action_photo"
                    android:icon="@drawable/ic_action_camera"
                    android:title="@string/action_photo"
                    app:showAsAction="always|withText" />
                <item
                    android:id="@+id/action_video"
                    android:icon="@drawable/ic_action_video"
                    android:title="@string/action_video"
                    app:showAsAction="always|withText" />
                <item
                    android:id="@+id/action_text"
                    android:icon="@drawable/ic_action_text"
                    android:title="@string/action_text"
                    app:showAsAction="always|withText" />
                <item
                    android:id="@+id/action_place"
                    android:icon="@drawable/ic_action_place"
                    android:title="@string/action_place"
                    app:showAsAction="always|withText" />
                <item
                    android:id="@+id/action_more"
                    android:title="@string/action_more"
                    android:visible="false"
                    app:showAsAction="always|withText" />

            </menu>
        </item>
        ...(more menu items here)
</menu>

Without AppCompat, you could just get rid of the XML Namespace app by replacing app with android.

这篇关于如何创建自定义popupMenu的机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆