簡體   English   中英

彈出菜單顯示在屏幕的左下角

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM