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

时间:2019-12-09 21:45:19

标签: java android android-fragments popupmenu

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

弹出菜单显示并运行良好。无论我如何更改其重力,它在错误位置显示的问题。请帮助。

1 个答案:

答案 0 :(得分:0)

仅参考文档,弹出菜单视图始终固定在视图上,它将弹出/显示在固定视图的下方或上方。与文档中一样,

  

PopupMenu在锚定到视图的模式弹出窗口中显示菜单。如果有空间,则弹出窗口将显示在锚视图下方,如果没有空间,则弹出窗口将显示在上方。如果IME可见,则弹出窗口在被触摸之前不会重叠。触摸弹出窗口外部将使其关闭。

PopupMenu

因此,在您的情况下,我已经对其进行了测试,并将其锚定到由getView()创建的视图实例中;我相信您的PopupMenu锚定到mainMenuButton的实例视图,或由getView()创建的任何实例的视图。

因为要使用以下构造函数PopupMenu(Context context, View anchor, int gravity)创建弹出菜单的实例,所以这意味着您要将弹出窗口锚定到某个特定的视图,该视图将在弹出菜单的上方或下方显示。

setGravity(int gravity)

设置用于将弹出窗口与其锚视图对齐的重力。

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