Android PopWindow 在sdk>7.0上顯示錯(cuò)位的bug適配

參考博客:http://blog.csdn.net/zhihui_520/article/details/79097161

之前在沒有適配Android sdk 7.0 的時(shí)候PopWindow 用來顯示下拉框 顯示阻斷提示 感覺比自定義的Dialog/DialogFragment 簡單粗暴多了
后來7.0出來后我大愛的PopWidow 顯示竟然錯(cuò)位了 what?沒辦法只能上萬能度一陣狂搜后來才知道這是PopWindow在Android7.0上的一個(gè)小小的bug航背、、旭旭、一萬個(gè)草泥飛奔而過

之前適配解決辦法:

在Sdk大于等于24 的時(shí)候先傳入觸發(fā)PopWidnow顯示的View獲取該View的絕對位置然后調(diào)用PopWindow的 showAtLocation方法把顯示偏移值給加上 然后就大功告成了(Andorid 的坐標(biāo)系是左上角 [0,0])

    public void showPopuWindow(View v) {
        if (popupWindow != null && popupWindow.isShowing()) {
            popupWindow.dismiss();
            return;
        } else {
            if (Build.VERSION.SDK_INT >= 24) {
                int[] a = new int[2];
                v.getLocationInWindow(a);
                popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, 0, v.getHeight() + a[1]);
            } else {
                popupWindow.showAsDropDown(v, 0, 0);
            }
        }
}

本以為大功告成了 后來在7.1上跑了一下 what? 老紙不是適配了么沒辦法那就在改吧 后來翻了大神的博客才知道原來Android7.1以上 Google大大已經(jīng)修復(fù)了這個(gè)Bug (吐槽:臥槽修改為啥不修改好!!!,大神也會(huì)犯錯(cuò)嗯淡定淡定)

現(xiàn)在的解決方案

其實(shí)就是獲取觸發(fā)點(diǎn)的絕對位置 讓屏幕的height減去觸發(fā)點(diǎn)的底部距離 然后重新給PopWidnow 設(shè)置高度顯示(純屬個(gè)人理解)

public void showAsDropDown(View anchor, int xoff, int yoff) {
    if (popupWindow != null && popupWindow.isShowing()) {
        popupWindow.dismiss();
        return;
    } else {
        if (Build.VERSION.SDK_INT >= 24) {
            Rect visibleFrame = new Rect();
            anchor.getGlobalVisibleRect(visibleFrame);
            int height = anchor.getResources().getDisplayMetrics().heightPixels - visibleFrame.bottom;
            popupWindow.setHeight(height);
            popupWindow.showAsDropDown(anchor, xoff, yoff);
        } else {
            popupWindow.showAsDropDown(anchor, xoff, yoff);
        }
    }
}

歡迎個(gè)大神扔磚指正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丑罪,一起剝皮案震驚了整個(gè)濱河市琼讽,隨后出現(xiàn)的幾起案子婆排,更是在濱河造成了極大的恐慌玻佩,老刑警劉巖荷科,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唯咬,死亡現(xiàn)場離奇詭異纱注,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)胆胰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門狞贱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜀涨,你說我怎么就攤上這事瞎嬉。” “怎么了厚柳?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵氧枣,是天一觀的道長。 經(jīng)常有香客問我别垮,道長便监,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任碳想,我火速辦了婚禮烧董,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胧奔。我一直安慰自己逊移,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布葡盗。 她就那樣靜靜地躺著螟左,像睡著了一般。 火紅的嫁衣襯著肌膚如雪觅够。 梳的紋絲不亂的頭發(fā)上胶背,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音喘先,去河邊找鬼钳吟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窘拯,可吹牛的內(nèi)容都是我干的红且。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼涤姊,長吁一口氣:“原來是場噩夢啊……” “哼暇番!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起思喊,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤壁酬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舆乔,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岳服,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了希俩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吊宋。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颜武,靈堂內(nèi)的尸體忽然破棺而出璃搜,到底是詐尸還是另有隱情,我是刑警寧澤盒刚,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布腺劣,位于F島的核電站,受9級特大地震影響因块,放射性物質(zhì)發(fā)生泄漏橘原。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一涡上、第九天 我趴在偏房一處隱蔽的房頂上張望趾断。 院中可真熱鬧,春花似錦吩愧、人聲如沸芋酌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脐帝。三九已至,卻和暖如春糖权,著一層夾襖步出監(jiān)牢的瞬間堵腹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工星澳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疚顷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓禁偎,卻偏偏與公主長得像腿堤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子如暖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容