PopupWindow 解析-[Android_YangKe]

1. PopupWindow介紹

2. PopupWindow簡單應用

3. PopupWindow添加動畫


更專業(yè)更權威的詳解請戳這里--https://developer.android.com/reference/android/widget/PopupWindow.html

老規(guī)矩ui圖先放出來:

popupWindow.gif


1.PopupWindow介紹:

PopupWindow這個類代表一個彈出窗口,可以用來顯示任意視圖徐紧。出現(xiàn)的彈出窗口是一個浮動容器在當前的activit上夸浅,它跟對話框比較類似優(yōu)點是更加的易于定制復雜的ui赌蔑、可控性更強!例:將這個窗口顯示在某一位置悦冀,某一view的下面等,這些是對話框所做不到的橙凳,你也可以根據(jù)自己的需求給窗口添加動畫使自己的項目看起來更加高逼格啤它,其實一個好的產(chǎn)品往往贏在細節(jié)、贏在體驗上工扎!下面將給出我的學習經(jīng)歷供大家學習徘钥,希望能給大家?guī)韼椭缬羞z漏或者講解不清楚的地方小伙伴可以給我發(fā)郵件肢娘,第一步當然是關注了呈础,然后進入到我的主頁 ……!

一部分代碼看懂PopupWindow的類關系:

public class PopupWindow

extendsObject

java.lang.Object

?android.widget.PopupWindow橱健。

首先說一下訪問修飾:public而钞、protected、private畴博、缺时考伞(無訪問修飾符)蓝仲!相信這個只要是接觸過java的小伙伴都應該了解它俱病!這里重點說下public。public修飾的類我們可以在任意包下任意類中訪問袱结!其他修飾符有protected亮隙、private、缺使讣小(無訪問修飾符)具體的作用我就不多說了網(wǎng)上零零碎碎一大堆隨時可以補充能量溢吻。使用public關鍵字修飾的類也就意味著我們可以在任何地方通過“new”直接創(chuàng)建對象,這樣我們可以很簡單的直接獲取一個PopupWindow對象,然后使用促王。

2. PopupWindow簡單應用

構建一個最基本的底部出來的PopupWindow犀盟,此方法很簡單只有僅僅三行的代碼,就可以構建出一個酷炫的PopupWindow蝇狼!

View view = LayoutInflater.from(activity).inflate(R.layout.bot_window, null);

PopupWindow window =newPopupWindow(view,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);

window.showAtLocation(activity.findViewById(R.id.bt_bottom_pop),Gravity.BOTTOM,0,0);

//將PopupWindow對象展示在mMenu的下面

//window.showAsDropDown(mMenu);

其中view對象是PopupWindow中需要顯示的ui阅畴,通過showAtLocation()方法就可將PopupWindow懸浮在activity上,此方法在項目中經(jīng)常用到迅耘,有需要的小伙伴們可以使用下面的代碼認真研究下贱枣。這里詳細說下方法中的四個主要參數(shù):

?1. PopupWindow的參照物view(在此view的某一個方向點上)

?2. PopupWindow在界面中的位置(底部、頂部颤专、居中)

?3. 相對窗口的x軸的偏移量

?4. 相對窗口的y軸的偏移量

項目中產(chǎn)品經(jīng)理的需求往往都很奇葩纽哥、天馬星空!沒有兩把刷子總是不能滿足產(chǎn)品需求的栖秕!有時候產(chǎn)品經(jīng)理會這樣: 給ui加個透明度春塌,點擊空白處應該讓窗口消失,默認輸入法要隱藏簇捍,有個動畫豈不是會好點等...

下面說幾個項目中常用的幾個方法供大家學習摔笤!

window.setFocusable(true);

ColorDrawable dw =newColorDrawable(0xb0000000);

dw.setAlpha(230);

window.setBackgroundDrawable(dw);

window.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);

//window.setInputMethodMode(PopupWindow.INPUT_METHOD_FROM_FOCUSABLE);

//window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);

這里特別說下window.setFocusable(true)和window.setBackgroundDrawable(dw)方法,前者給窗口設置一個焦點垦写,后者給為窗口設置一個背景色吕世。這兩個方法的結合主要體現(xiàn)在用戶點擊空白處窗口關閉,且兩者缺一不可梯投。

window.setInputMethodMode()主要應用在PopupWindow中存在輸入框的情況下命辖,意思是鍵盤默認以什么樣的方式進行顯示,有需求的小伙伴可以深入看下分蓖,上面已給出常用的三種使用方式供學習(1. 有需要時顯示尔艇、2. 點擊輸入框時顯示、3. 始終不顯示)么鹤。

3. PopupWindow添加動畫

如果你剛剛主動敲了最原始PopupWindow體驗效果應該是很不好的终娃,所以為了提高用戶的留存率我們需要將效果做的更加的“浪漫”!

window.setAnimationStyle(R.style.anim_menu_bottombar);

此方法中接收一個動畫集蒸甜,主要用于指定窗口進入的動畫和窗口結束的動畫棠耕。

這里給出核心代碼,具體的動畫效果自己可以根據(jù)業(yè)務需要進行定制柠新。

privatePopupWindowshowMenuPopupWindow() {

View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.menu, null);

PopupWindow pw =newPopupWindow(contentView);

pw.setFocusable(true);

ColorDrawable dw =newColorDrawable(0x00000000);

dw.setAlpha(230);

pw.setBackgroundDrawable(dw);

pw.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);

pw.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);

pw.setAnimationStyle(R.style.anim_menu_exit);

pw.showAsDropDown(mMenu);

returnpw;

}

public staticPopupWindowshowBottomPopupWindow(Activity activity) {

View view = LayoutInflater.from(activity).inflate(R.layout.bot_window, null);

PopupWindow window =newPopupWindow(view,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);

window.setFocusable(true);

ColorDrawable dw =newColorDrawable(0xb0000000);

dw.setAlpha(230);

window.setBackgroundDrawable(dw);

window.setAnimationStyle(R.style.anim_menu_bottombar);

// 系統(tǒng)決定鍵盤是否進行顯示,以便用戶可以操作時進行使用

// ? ? ? ?window.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);

// 當點擊輸入框時彈出鍵盤

// ? ? ? ?window.setInputMethodMode(PopupWindow.INPUT_METHOD_FROM_FOCUSABLE);

// 始終不顯示鍵盤

window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);

window.showAtLocation(activity.findViewById(R.id.bt_bottom_pop),Gravity.BOTTOM,0,0);

returnwindow;

}

到這里就結束了窍荧!如果文章有遺漏或講的不好的地方,歡迎拍磚恨憎!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕊退,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓤荔,老刑警劉巖净蚤,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異输硝,居然都是意外死亡塞栅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門腔丧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來放椰,“玉大人,你說我怎么就攤上這事愉粤±剑” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵衣厘,是天一觀的道長如蚜。 經(jīng)常有香客問我,道長影暴,這世上最難降的妖魔是什么错邦? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮型宙,結果婚禮上撬呢,老公的妹妹穿的比我還像新娘。我一直安慰自己妆兑,他們只是感情好魂拦,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搁嗓,像睡著了一般芯勘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腺逛,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天荷愕,我揣著相機與錄音,去河邊找鬼棍矛。 笑死安疗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的茄靠。 我是一名探鬼主播茂契,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慨绳!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脐雪,失蹤者是張志新(化名)和其女友劉穎厌小,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體战秋,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡璧亚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脂信。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癣蟋。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狰闪,靈堂內(nèi)的尸體忽然破棺而出疯搅,到底是詐尸還是另有隱情,我是刑警寧澤埋泵,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布幔欧,位于F島的核電站,受9級特大地震影響丽声,放射性物質(zhì)發(fā)生泄漏礁蔗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一雁社、第九天 我趴在偏房一處隱蔽的房頂上張望浴井。 院中可真熱鬧,春花似錦霉撵、人聲如沸滋饲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屠缭。三九已至,卻和暖如春崭参,著一層夾襖步出監(jiān)牢的瞬間呵曹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工何暮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奄喂,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓海洼,卻偏偏與公主長得像跨新,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坏逢,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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