Android N上Popwindow顯示位置不正確問題
阿新 • • 發佈:2019-02-07
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);
}