java - 弹出菜单出现在左下角
问题描述
我正在尝试在我的片段中实现弹出菜单,但结果远远超出了我的期望。我在操作栏上有一个按钮,其中一个按钮调用弹出菜单,直到这里没有问题。它成功调用,我可以看到弹出菜单。这是我的做法。
在片段类
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.x) {
} else showPopup(view /* or getView() */);
return super.onOptionsItemSelected(item);
}
public void showPopup(View v) {
PopupMenu popupMenu = new PopupMenu(getContext(), v);
MenuInflater menuInflater = popupMenu.getMenuInflater();
menuInflater.inflate(R.menu.event_popup, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
return false;
}
});
popupMenu.show();
}
popup_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/a"
android:icon="@drawable/ic_action_back"
android:title="a" />
<item android:id="@+id/b"
android:icon="@drawable/ic_action_back"
android:title="b" />
片段的操作菜单(包括打开弹出菜单的按钮)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/x"
android:icon="@drawable/ic_action_back"
yourapp:showAsAction="ifRoom"
android:title="" />
<item android:id="@+id/y"
android:icon="@drawable/ic_action_menu_dot"
yourapp:showAsAction="ifRoom"
android:title="" />
</menu>
结果是它的外观。我希望它在右上角。我该如何处理。据我所知,它的默认位置已经在右上角。
解决方案
您需要为弹出菜单提供正确的锚视图(在这种情况下为溢出菜单)。
尝试改变
showPopup(view);
到
View menuItemView = MyActivity.this.findViewById(R.id.overflow_menu); // replace with your id
showPopup(menuItemView);
这应该将弹出菜单置于顶部。如果它仍然在左侧使用
popupMenu.setGravity(Gravity.END);
推荐阅读
- ios - 导航控制器 Xcode 10 中的 Segue
- python - Python。绑定方法、Mixins 和类装饰器
- c# - 为什么 Sonarqube 不分析 .Net 4.5 c# 代码
- javascript - 变量更改后调用事件
- java - Android Studio OpenCV 中的颜色检测
- javascript - 使用 Javascript 传递选定的复选框值
- regex - 正则表达式查找相同字符的多次出现并排除行中的单词
- c - 如何使用 OpenMP 在其他 for 循环中并行化 for 循环
- java - FFmpegFrameGrabber 仅使用关键帧更快的 SetTimestamp
- r - 如何为自定义 S3 类实现提取/子集([、[<-、[[、[[<-)] 函数?