1. 程式人生 > >Android N上Popwindow顯示位置不正確問題

Android N上Popwindow顯示位置不正確問題

Popwindow是Android應用開發過程中比較常用的一個元件,最近發現了在Android N(Android 7.0,7.1)上Popwindow的一個位置顯示問題,當指定PopupWindow高度為MATCH_PARENT時使用showAsDropDown或者是showAtLocation來顯示Popwindow,Popwindow總是頂到了螢幕頂部,而不是在設定的指定控制元件下方顯示,而在Android 6.0及6.0以下系統上顯示正常。
如圖所示:

mPopupWindow.showAsDropDown(mBtn);

Android 6.0及以下系統上正常顯示(在指定的控制元件的下發顯示):

Android N(7.0)以及 上顯示不正常不論怎麼設定總是頂到螢幕頂部):

經過查詢資料,發現這是Android N上Popwindow的一個Bug。可以通過如下方法來解決:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // Android 7.x中,PopupWindow高度為match_parent時,會出現相容性問題,需要處理相容性
                int[] mLocation = new int[2];
                mBtn.getLocationInWindow(mLocation);
                int
offsetY = mLocation[1] + mBtn.getHeight(); if (Build.VERSION.SDK_INT >= 25) { // Android 7.1中,PopupWindow高度為 match_parent 時,會佔據整個螢幕 //故而需要在 Android 7.1上再做特殊處理 int screenHeight = DisplayUtil.getScreenHeight(MainActivity.this); // 獲取螢幕高度 mPopupWindow.setHeight(screenHeight - offsetY); // 重新設定 PopupWindow 的高度
} mPopupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, offsetY); } else { mPopupWindow.showAsDropDown(mBtn); }