一、初始化父View和子View
onCreate(Bundle SavedInstanceState){
super.onCreate(SavedInstanceState)
setContentView(R.layout.activity_good_rank_list);
viewParent = getLayoutInflater().inflate(R.layout.activity_good_rank_list, null);
viewContent = getLayoutInflater().inflate(R.layout.popup_sort, null);
//pop用子view來(lái)呈現(xiàn),后面兩個(gè)參數(shù)分別是寬和高
popupWindow = new PopupWindow(viewContent, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
二蟀悦、為pop設(shè)置動(dòng)畫
<resources>
<style name="animation">
<item name="android:windowEnterAnimation">@anim/enter</item>
<item name="android:windowExitAnimation">@anim/out</item>
</style>
</resources>```
enter:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate
android:duration="500"
android:fromYDelta="100%p"
android:toYDelta="0" />
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>```
out:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate
android:duration="500"
android:fromYDelta="0"
android:toYDelta="100%p" />
<alpha
android:duration="300"
android:fromAlpha="1.0"
android:toAlpha="0" />
</set>```
//給popupWindow窗口加入動(dòng)畫效果
popupWindow.setAnimationStyle(R.style.animation);```
三、展現(xiàn)pop
//顯示PopupWindow的方法:
showAsDropDown(Viewanchor) //相對(duì)某個(gè)控件的位置(正下方),無(wú)偏移 吏廉, 有滑動(dòng)出來(lái)的效果
showAsDropDown(Viewanchor, int xoff, int yoff) //相對(duì)某個(gè)控件的位置,有偏移惰许,xoff X軸的偏移量席覆,yoff Y軸的偏移量
showAtLocation(Viewparent, int gravity, int x, int y) //在父容器的什么位置,gravity為相對(duì)位置汹买,如:正中央Gravity.CENTER佩伤、下方Gravity.BOTTOM、Gravity.Right|Gravity.BOTTOM右下方等晦毙,后面兩個(gè)參數(shù)為x/y軸的偏移量生巡。```
####四、pop外部點(diǎn)擊可以取消
// 點(diǎn)擊空白的地方關(guān)閉PopupWindow
有兩種方案
//此方案外部點(diǎn)擊取消的同時(shí)见妒,如果點(diǎn)擊到外部的控件孤荣,會(huì)產(chǎn)生點(diǎn)擊效果
popupWindow.setBackgroundDrawable(new BitmapDrawable());//加背景
popupWindow.setOutsideTouchable(true);//設(shè)置外部點(diǎn)擊取消```
//此方案點(diǎn)擊外部只會(huì)取消,在popupWindow show出來(lái)之前設(shè)置
popupWindow.setBackgroundDrawable(new BitmapDrawable());//加背景
popupWindow.setFocusable(true);//設(shè)置外部點(diǎn)擊取消```
####五、彈出pop改變背景顏色
只需在彈出后增加改變背景顏色的代碼
backgroundAlpha(0.5f);```
//方法具體代碼
void backgroundAlpha(float bgAlpha){
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = bgAlpha; //0.0-1.0
getWindow().setAttributes(lp);
}```
//當(dāng)然在pop消失時(shí)需要恢復(fù)背景色垃环,此時(shí)需要監(jiān)聽(tīng)pop的消失事件
popupWindow.setOnDismissListener(new OnDismissListener){
@Override
public void onDismiss() {
backgroundAlpha(1);
}
}```