PopupWindow顯示位置錯(cuò)誤(7.0)

在這次做項(xiàng)目篩選功能時(shí)需要用到PopupWindow,但是在做的過程中發(fā)現(xiàn)一個(gè)問題,如果要讓POP顯示在指定view正下方時(shí),調(diào)用showAsDropDown()這個(gè)方法,而去pop窗口高度是match_parent,在7.0以下系統(tǒng)顯示正常,但是在7.1顯示就不正常,不是自己想要的效果。

popupWindow設(shè)置了居中或者底部對(duì)齊,但是在7.0機(jī)器是跑到頂部。

很明顯這個(gè)bug是和我們?cè)O(shè)置了Gravity有關(guān)。

展示popupWindow的函數(shù)有兩個(gè),showAtLocation 和 update。

重點(diǎn)看了那兩個(gè)函數(shù)的API 24 和 API 23 的區(qū)別。

解決方案一

我在24版本使用showAtLocation(View parent, int gravity, int x, int y)。其中parent只要為當(dāng)前頁(yè)面的view即可,gravity用Gravity.NO_GRAVITY,x,y為你要顯示的位置。如果要顯示在某個(gè)view的下面,就獲取該view的坐標(biāo)就好。

if (Build.VERSION.SDK_INT >= 24) {

 //7.0以上系統(tǒng)

//獲取目標(biāo)控件在屏幕中的坐標(biāo)位置

int[] location = new int[2];

anchor.getLocationOnScreen(location);

mPopupWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, 0, location[1] );

} else {

mPopupWindow.showAsDropDown(anchor);

}

方法二

重寫popWindows的showAsDropDown方法

public class CustomPopupWindowextends PopupWindow {

public CustomPopupWindow(Context context) {

super(context, null);

}

@Override

public void showAsDropDown(View anchor) {

if (Build.VERSION.SDK_INT >= 24) {

Rect rect = new Rect();

anchor.getGlobalVisibleRect(rect);

int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;

setHeight(h);

}

super.showAsDropDown(anchor);

}

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近比較偷懶哈,已經(jīng)有一段時(shí)間沒有更新分享了,一個(gè)原因也是最近需要接觸前端的一些知識(shí),另外也是項(xiàng)目比較忙,周末事情...
    juexingzhe閱讀 27,983評(píng)論 1 15
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,323評(píng)論 0 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評(píng)論 25 709
  • 本文出自 “阿敏其人” 簡(jiǎn)書博客,轉(zhuǎn)載或引用請(qǐng)注明出處。 前言 注:為書寫方便,本文的popup代表PopupWi...
    阿敏其人閱讀 5,454評(píng)論 3 26
  • 在這次項(xiàng)目需要用到PopupWindow,但發(fā)現(xiàn)如果你用showAsDropDown()這個(gè)方法,讓pop顯示在某...
    萬戶猴閱讀 1,578評(píng)論 0 1

友情鏈接更多精彩內(nèi)容