如何创建自定义popupMenu的机器人 [英] How to create a custom PopupMenu in Android
问题描述
我怎么能复制像我Balsamiq做以下?
我做了这个菜单,但它只是显示的项目(未图标)的文字。是否有可能显示一个PopupMenu的标题和图标?
下面是我的 create_post_menu.xml
< XML版本=1.0编码=UTF-8&GT?;
<菜单的xmlns:机器人=http://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:机器人=http://schemas.android.com/apk/res/android
的xmlns:程序=http://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屋!