1. PopupWindow介紹
2. PopupWindow簡單應用
3. PopupWindow添加動畫
更專業(yè)更權威的詳解請戳這里--https://developer.android.com/reference/android/widget/PopupWindow.html
老規(guī)矩ui圖先放出來:
1.PopupWindow介紹:
PopupWindow這個類代表一個彈出窗口,可以用來顯示任意視圖徐紧。出現(xiàn)的彈出窗口是一個浮動容器在當前的activit上夸浅,它跟對話框比較類似優(yōu)點是更加的易于定制復雜的ui赌蔑、可控性更強!例:將這個窗口顯示在某一位置悦冀,某一view的下面等,這些是對話框所做不到的橙凳,你也可以根據(jù)自己的需求給窗口添加動畫使自己的項目看起來更加高逼格啤它,其實一個好的產(chǎn)品往往贏在細節(jié)、贏在體驗上工扎!下面將給出我的學習經(jīng)歷供大家學習徘钥,希望能給大家?guī)韼椭缬羞z漏或者講解不清楚的地方小伙伴可以給我發(fā)郵件肢娘,第一步當然是關注了呈础,然后進入到我的主頁 ……!
一部分代碼看懂PopupWindow的類關系:
public class PopupWindow
extendsObject
?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;
}
到這里就結束了窍荧!如果文章有遺漏或講的不好的地方,歡迎拍磚恨憎!