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

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

public class PopupWindow

extendsObject

java.lang.Object

?android.widget.PopupWindow。

首先說一下訪問修飾:public、protected、private、缺省(無訪問修飾符)!相信這個只要是接觸過java的小伙伴都應該了解它!這里重點說下public。public修飾的類我們可以在任意包下任意類中訪問!其他修飾符有protected、private、缺省(無訪問修飾符)具體的作用我就不多說了網上零零碎碎一大堆隨時可以補充能量。使用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上,此方法在項目中經常用到,有需要的小伙伴們可以使用下面的代碼認真研究下。這里詳細說下方法中的四個主要參數:

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

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

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

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

項目中產品經理的需求往往都很奇葩、天馬星空!沒有兩把刷子總是不能滿足產品需求的!有時候產品經理會這樣: 給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)方法,前者給窗口設置一個焦點,后者給為窗口設置一個背景色。這兩個方法的結合主要體現在用戶點擊空白處窗口關閉,且兩者缺一不可。

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

3. PopupWindow添加動畫

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

window.setAnimationStyle(R.style.anim_menu_bottombar);

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

這里給出核心代碼,具體的動畫效果自己可以根據業(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;

}

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容