如何创建自定义popupMenu的机器人自定义、机器人、popupMenu

2023-09-12 21:49:47 作者:做人实称点

我怎么能复制像我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/>

< /菜单>
 

为什么每个空间最多只创建100自定义模块啊 还有没有别的办法在做空间自定义模块呀

修改

下面是我的 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,你可以只得到通过机器人。

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.