在here之前已经问过这个问题。我按照答案中的步骤进行操作,但是没有用。
我在片段中有一个按钮。单击该按钮时,我想显示一个弹出菜单。我尝试了很多方法,但是弹出菜单始终显示在屏幕的左下方。
这是弹出菜单方法:
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());
}
});
弹出菜单显示并运行良好。无论我如何更改其重力,它在错误位置显示的问题。请帮助。
答案 0 :(得分:0)
仅参考文档,弹出菜单视图始终固定在视图上,它将弹出/显示在固定视图的下方或上方。与文档中一样,
PopupMenu在锚定到视图的模式弹出窗口中显示菜单。如果有空间,则弹出窗口将显示在锚视图下方,如果没有空间,则弹出窗口将显示在上方。如果IME可见,则弹出窗口在被触摸之前不会重叠。触摸弹出窗口外部将使其关闭。
因此,在您的情况下,我已经对其进行了测试,并将其锚定到由getView()创建的视图实例中;我相信您的PopupMenu锚定到mainMenuButton的实例视图,或由getView()创建的任何实例的视图。
因为要使用以下构造函数PopupMenu(Context context, View anchor, int gravity)
创建弹出菜单的实例,所以这意味着您要将弹出窗口锚定到某个特定的视图,该视图将在弹出菜单的上方或下方显示。
setGravity(int gravity)
设置用于将弹出窗口与其锚视图对齐的重力。
这只是让您了解实际发生的事情。因此,简单的解决方案是将锚视图放置在弹出视图将出现的位置,然后修改相对于锚的对齐方式,以修改相对于锚视图的位置。