gpt4 book ai didi

java - 弹出菜单显示在屏幕左下方

转载 作者:行者123 更新时间:2023-12-01 19:31:26 24 4
gpt4 key购买 nike

这个问题之前已经被问过here 。我按照答案中的步骤操作,但没有成功。

我在 fragment 中有一个按钮。我想在单击该按钮时显示一个弹出菜单。我尝试了很多方法,但弹出菜单一直显示在屏幕左下角。

这是弹出菜单的方法:

    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();
}

然后我在 fragment 的 onCreateView 内创建了一个按钮来调用该方法:

mainMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPopup(getView());
}
});

弹出菜单显示且运行良好。无论我如何改变它的重力,它都会在错误的位置显示问题。请帮忙。

最佳答案

仅引用文档,弹出菜单 View 始终锚定到 View ,它将弹出/出现在锚定 View 的下方或上方。如文档中所示,

A PopupMenu displays a Menu in a modal popup window anchored to a View. The popup will appear below the anchor view if there is room, or above it if there is not. If the IME is visible the popup will not overlap it until it is touched. Touching outside of the popup will dismiss it.

PopupMenu

因此,在您的情况下,我已经测试过它锚定到 getView() 创建的 View 实例;我相信您的 PopupMenu 锚定到 mainMenuButton 的实例 View ,或 getView() 创建的任何内容;

因为您正在使用以下构造函数创建弹出菜单的实例PopupMenu(Context context, Viewanchor, intgravity),所以这意味着您将弹出菜单锚定到特定 View ,上方或下方将出现弹出菜单。

setGravity(int gravity)

设置用于将弹出窗口与其 anchor View 对齐的重力。

这只是为了让您了解实际发生的情况。因此,简单的解决方案是将 anchor View 放在弹出 View 将出现的位置,然后修改相对于 anchor 的对齐,以修改相对于 anchor View 的位置。

关于java - 弹出菜单显示在屏幕左下方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59257130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com