[英]Popup Menu shows at left bottom of the screen
这个问题以前在这里问过。 我按照答案中的步骤操作,但没有用。
我在片段中有一个按钮。 我想在单击该按钮时显示一个弹出菜单。 我尝试了很多方法,但弹出菜单一直显示在屏幕的左下角。
这是弹出菜单方法:
public void showPopup(View v) {
//added library level 25
//may conflict with later updates
PopupMenu popup = new PopupMenu(getContext(), v, Gravity.END);
popup.setGravity(Gravity.END);
MenuInflater menuInflater = popup.getMenuInflater();
menuInflater.inflate(R.menu.menu_home_fragment, popup.getMenu());
//handling items of the popup menu:
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int id = item.getItemId();
//no inspection Simplifiable If Statement
if (id == R.id.menu_about_app) {
//startActivity(new Intent(MainActivity.this, AboutDietCornerActivity.class));
}
if (id == R.id.menu_rate_app) {
Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.techdroidltd.dietcorner"));
startActivity(i);
}
if (id == R.id.menu_user_ideas) {
//startActivity(new Intent(MainActivity.this, UserIdeasActivity.class));
}
if (id == R.id.menu_privacy_policy) {
//startActivity(new Intent(MainActivity.this, PrivacyPolicyActivity.class));
}
return false;
}
});
//end of handling items .. then show popup:
popup.show();
}
然后我在片段的 onCreateView 中创建了一个按钮来调用该方法:
mainMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPopup(getView());
}
});
弹出菜单显示并运行良好。 无论我如何改变它的重力,它都显示在错误的地方的问题。 请帮忙。
只是参考文档,弹出菜单视图总是锚定到视图,它会弹出/出现在锚定视图的下方或上方。 在文档中,
PopupMenu 在锚定到视图的模式弹出窗口中显示菜单。 如果有空间,则弹出窗口将出现在锚视图下方,如果没有,则在其上方。 如果 IME 可见,则弹出窗口将不会与它重叠,直到它被触摸。 触摸弹出窗口之外将关闭它。
因此,在您的情况下,我已经测试过它锚定到由 getView() 创建的视图实例; 我相信您的 PopupMenu 锚定到 mainMenuButton 的实例视图,或由 getView() 创建的任何内容;
因为您正在使用以下构造函数PopupMenu(Context context, View anchor, int gravity)
创建弹出菜单的实例,所以这意味着您将弹出菜单锚定到某个视图,弹出菜单将出现在该视图的上方或下方。
setGravity(int gravity)
设置用于将弹出窗口与其锚视图对齐的重力。
这只是让你了解实际发生的事情。 因此,简单的解决方案是将锚视图放在弹出视图将出现的位置,然后修改相对于锚的对齐,以修改相对于锚视图的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.