在Android API 23中,我有一个包含子菜单项的弹出菜单。我已经将引力定义到最后,如图所示
popupMenu = new PopupMenu(this, v, Gravity.END);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add_reminder:
// Option1
// ... other options / not relevant for the question
popupMenu.inflate(R.menu.menu_contact_context);
popupMenu.show();
菜单有几个子菜单,如xml
中所定义<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="es.goodsal.mobile.ContactActivity">
<item
android:id="@+id/add"
android:icon="@android:drawable/ic_menu_add"
android:title="@string/action_add"
>
<menu>
<item
android:id="@+id/action_add_reminder"
android:icon="@drawable/ic_action_add_reminder"
android:orderInCategory="100"
android:title="@string/action_add_reminder"
/>
<item
android:id="@+id/action_add_note"
android:icon="@drawable/ic_action_add_note"
android:orderInCategory="100"
android:title="@string/action_add_note"/>
<item
android:id="@+id/action_add_opportunity"
android:icon="@drawable/ic_action_add_opportunity"
android:orderInCategory="100"
android:title="@string/action_add_opportunity"/>
<item
android:id="@+id/action_add_agenda"
android:icon="@drawable/ic_action_add_agenda"
android:orderInCategory="100"
android:title="@string/action_add_agenda"/>
<item
android:id="@+id/action_add_task"
android:icon="@drawable/ic_action_add_task"
android:orderInCategory="100"
android:title="@string/action_add_task"/>
</menu>
</item>
<item
android:id="@+id/action_contact_edit"
android:icon="@android:drawable/ic_menu_edit"
android:title="@string/action_edit"/>
<item
android:id="@+id/action_contact_record"
android:icon="@drawable/ic_contact_default"
android:title="@string/action_contact"/>
<item
android:id="@+id/action_report"
android:title="@string/action_report"/>
<item
android:id="@+id/funnel"
android:icon="@drawable/ic_action_funnel"
android:title="@string/action_funnel"
>
<menu>
<item
android:id="@+id/action_funnel_progress"
android:orderInCategory="100"
android:title="@string/action_funnel_progress"
/>
<item
android:id="@+id/action_funnel_regress"
android:orderInCategory="100"
android:title="@string/action_funnel_regress"
/>
</menu>
</item>
</menu>
我的问题是当菜单显示时。原始菜单与右边对齐(= Gravity.END),但是子菜单与左边对齐,我找不到定义子菜单重力的方法(为什么不相同?!?)
答案 0 :(得分:1)
并不是一个真正的答案,但我刚刚发布了一个库,用于使用PopupMenu来解决问题时构建更好的嵌套菜单:https://github.com/saket/cascade
它旨在代替PopupMenu
:
- val popup = PopupMenu(context, anchor)
+ val popup = CascadePopupMenu(context, anchor)
popup.inflate(R.menu.nicolas_cage_movies)
popup.show()