記一次PopupWindow內(nèi)部View高度測(cè)量問(wèn)題

先拋出問(wèn)題

因?yàn)椴季峙虐嬖颍琓extView并不能完全展示其內(nèi)容,所以出現(xiàn)此需求:點(diǎn)擊TextView在其上方出現(xiàn)一個(gè)氣泡背景來(lái)展示其內(nèi)容。
本來(lái)想著很簡(jiǎn)單的一個(gè)需求动分,首先想到了PopiWindow,用PopuWindow的showAtLocation()去實(shí)現(xiàn)红选,寫(xiě)出了如下代碼澜公。

LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflate = layoutInflater.inflate(R.layout.popupwindow_layout, null);
TextView tv_Content = (TextView) inflate.findViewById(R.id.tv_Content);
PopupWindow popupWindow = new PopupWindow(inflate, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
tv_Content.setText(content);
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);
// 這個(gè)是為了點(diǎn)擊“返回Back”也能使其消失,并且并不會(huì)影響你的背景
popupWindow.setBackgroundDrawable(new BitmapDrawable());
int[] location = new int[2];
//getLocationOnScreen()此函數(shù)可以獲取到View所在視圖的絕對(duì)坐標(biāo)點(diǎn)喇肋,并將獲取到的坐標(biāo)點(diǎn)存放到一個(gè)int數(shù)組中
view.getLocationOnScreen(location);

popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, location[0],location[1] - tv_Content.getHeight());

本以為如此簡(jiǎn)單坟乾,結(jié)果發(fā)現(xiàn)

popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, location[0],location[1] - tv_Content.getHeight());

并未生效(Y軸坐標(biāo)未生效)想到肯定是這里出的問(wèn)題

location[1] - tv_Content.getHeight()

因?yàn)檫@是控制PopuWindow將要出現(xiàn)在Y軸的具體位置,所以想著肯定是

tv_Content.getHeight()沒(méi)獲取到準(zhǔn)確高度

好了蝶防,現(xiàn)在知道問(wèn)題了甚侣,那么直接通過(guò)post()函數(shù)去獲取到tv_Content的高度不就行了嘛,此時(shí)代碼如下:

tv_Content.post(new Runnable() {
    @Override
    public void run() {
        mHeight = tv_Content.getMeasuredHeight();
        Log.e("TAG","post>>>>" + height);
    }
});
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, location[0],location[1] - mHeight);

此時(shí)發(fā)現(xiàn)效果跟之前沒(méi)啥變化慧脱,但是log打印的height是正確的渺绒,想著應(yīng)該是PopuWindow先show后,才獲取到的height菱鸥,所以沒(méi)變化,那好吧我把PopuWindow放在post里面show總行了吧躏鱼。

tv_Content.post(new Runnable() {
    @Override
    public void run() {
        int height = tv_Content.getMeasuredHeight();
        Log.e("TAG","post>>>>" + height);
         popupWindow.showAtLocation(view, Gravity.NO_GRAVITY,
                    location[0],location[1] - height);
    }
});

此時(shí)發(fā)現(xiàn)效果還是沒(méi)變化氮采,而且離奇的事情發(fā)生了log打印出height的值為0,這是為啥呢染苛?之前還能獲取到的高度這次怎么獲取不到了鹊漠?于是經(jīng)過(guò)兩個(gè)小時(shí)的測(cè)試最終發(fā)現(xiàn)。茶行。躯概。。

PopupWindow未show之前畔师,其內(nèi)部的View是獲取不到寬高的娶靡。

于是最終修改為:

tv_Content.post(new Runnable() {
    @Override
    public void run() {
        int height = tv_Content.getMeasuredHeight();
        Log.e("TAG","post>>>>" + height);
        if (popupWindow.isShowing()){
            popupWindow.dismiss();
            tv_Content.setVisibility(View.VISIBLE);//此時(shí)讓其顯示出來(lái)
            popupWindow.showAtLocation(view, Gravity.NO_GRAVITY,
                    location[0],location[1] - height);
        }
    }
});
//PopuWindow第一次show(注意:tv_Content我默認(rèn)是invisible,所以第一次其實(shí)用戶是看不到popu的)
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, location[0],location[1]);

好了看锉,結(jié)束姿锭。下班Kⅰ!呻此!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轮纫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子焚鲜,更是在濱河造成了極大的恐慌掌唾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忿磅,死亡現(xiàn)場(chǎng)離奇詭異郑兴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)贝乎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)情连,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人览效,你說(shuō)我怎么就攤上這事却舀。” “怎么了锤灿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵挽拔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我但校,道長(zhǎng)螃诅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任状囱,我火速辦了婚禮术裸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亭枷。我一直安慰自己袭艺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布叨粘。 她就那樣靜靜地躺著猾编,像睡著了一般。 火紅的嫁衣襯著肌膚如雪升敲。 梳的紋絲不亂的頭發(fā)上答倡,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音驴党,去河邊找鬼瘪撇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的设江。 我是一名探鬼主播锦茁,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叉存!你這毒婦竟也來(lái)了码俩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤歼捏,失蹤者是張志新(化名)和其女友劉穎稿存,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瞳秽,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓣履,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了练俐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袖迎。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腺晾,靈堂內(nèi)的尸體忽然破棺而出燕锥,到底是詐尸還是另有隱情,我是刑警寧澤悯蝉,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布归形,位于F島的核電站,受9級(jí)特大地震影響鼻由,放射性物質(zhì)發(fā)生泄漏暇榴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一蕉世、第九天 我趴在偏房一處隱蔽的房頂上張望蔼紧。 院中可真熱鬧,春花似錦讨彼、人聲如沸歉井。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至躏嚎,卻和暖如春蜜自,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卢佣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工重荠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虚茶。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓戈鲁,卻偏偏與公主長(zhǎng)得像仇参,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婆殿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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