1.創建一個popupwindow
view的布局文件自己寫一個就好了,這里就不說了
1 View view= LayoutInflater.from(context).inflate(R.layout.view, null); 2 //背景顏色 3 view.setBackgroundColor(Color.WHITE); 4 PopupWinow popupWindow = new PopupWindow(view,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); 5 //顯示(自定義位置) 6 popupWindow .showAtLocation(button, Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0); 7 //popupWindow .showAsDropDown();//顯示在控件下面 8 //關閉 9 popupWindow.dismiss(); 10 popupWindow.isShowing();//判斷當前popupwindow是否打開
2.經常用到的,點擊窗體外消失
1 // 需要設置一下此參數,點擊外邊可消失 2 popupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), 3 (Bitmap) null)); 4 // 點擊窗外可取消 5 popupWindow.setTouchable(true); 6 popupWindow.setOutsideTouchable(true);
3.關於窗體會被軟件盤遮擋
1 // 設置pop被鍵盤頂上去,而不是遮擋 2 popupWindow.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED); 3 popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
4.關於給popupwindow添加各種動畫效果(旋轉,漸現,平移...),至於動畫效果自己選
(1).給pop設置屬性
1 popupWindow.setAnimationStyle(R.style.popwindow_anim_style); // 設置動畫
(2).然后就是在style樣式里面寫樣式了
1 <style name="popwindow_anim_style"> 2 <item name="android:windowEnterAnimation">@anim/popup_show</item> 3 <!-- 指定顯示時的動畫xml --> 4 <item name="android:windowExitAnimation">@anim/popup_gone</item> 5 <!-- 指定消失時的動畫xml --> 6 </style>
(3).最后就是在anim里面配置動畫效果了
popup_show:
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" > 3 <translate 4 android:fromXDelta="-100%" 5 android:toXDelta="0" 6 android:fromYDelta="0" 7 android:toYDelta="0" 8 android:duration="500" /> 9 </set>
popup_gone:
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" > 3 <translate 4 android:fromXDelta="0" 5 android:toXDelta="-100%" 6 android:fromYDelta="0" 7 android:toYDelta="0" 8 android:duration="300" /> 9 </set>
5.pop的彈窗效果可以通過在AndroidManifest.xml里面設置成Theme.Dialog,
1 android:theme="@android:style/Theme.Dialog"
個人感覺如果頁面的內容稍復雜點不喜歡用pop容易出現各種問題。一提的是,使用activity回調時如果startActivityForResult()剛剛執行完就調用了onActivityResult()而沒有將相應的值傳回來,在AndroidManifest.xml里將當前activity的launchMode去掉
1 android:launchMode="singleTask"
6.遇到show后不顯示,設置寬高
etWidth(LayoutParams.WRAP_CONTENT);
setHeight(LayoutParams.WRAP_CONTENT);
