PopupWindow彈出後其他地方變暗的效果如何實現
現實的解決方法,總結了一下,共有兩種
第一種方法,簡單有效:
popupwindow 的界面本來就是和整個屏幕一樣的大小,
只是有內容的部分集中在下面了,通過設置他的背景色透明來遮蓋後面的背景實現透明。
代碼及實現
比較簡單,就是修改彈出layout的背景顏色
android:background="#b3b3b3"
初始化代碼
protected void initPopuptWindow() {
WindowManager windowManager = getActivity().getWindowManager();
Display display = windowManager.getDefaultDisplay();
popupWindow = new PopupWindow(popupWindow_view, display.getWidth(),display.getHeight(), true);
// 設置動畫效果
popupWindow.setAnimationStyle(R.style.Animation_ZoomLight);
//點擊其他地方消失
popupWindow_view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
closePopupWindow();
return false;
}
});
}
效果圖如下:
第二種方法
相信大傢伙親自動手試一下就知道了,第一種方法的缺點也是顯而易見的,他通過覆蓋了原來的activity來達到透明的效果,結果原Activity的就被覆蓋了,對用戶的體驗極差,如果這樣不行,那麼就只有在彈出popupwindow時,修改一下activity的透明度,這樣就可以清晰地看到原來activity中沒有被覆蓋的部分,怎麼樣?用戶體驗是不是要好一些,但是當我們正爲自己的成果欣喜若狂的時候,這時突然發現只要一關popupwindow,activity的透明度還是半透明狀態,應用很明顯換了透明度,這可不是一件正常的事情,一定會讓人感覺怪怪的,因此我怎麼辦呢,我們一定要做好善後處理工作,在popupwindow關閉時,我們也手動的修改一下activity的透明度,好了,這下子就不會有任何問題了,好了,very
good!相信大家一定是迫不及待的想問我要代碼了,好了,我把代碼也附上吧
代碼及實現
第二種方案的部分代碼
/**
* 創建PopupWindow
*/
protected void initPopuptWindow() {
WindowManager windowManager = getActivity().getWindowManager();
Display display = windowManager.getDefaultDisplay();
popupWindow = new PopupWindow(popupWindow_view, display.getWidth(),display.getHeight(), true);
// 設置動畫效果
popupWindow.setAnimationStyle(R.style.Animation_ZoomLight);
WindowManager.LayoutParams params=getActivity().getWindow().getAttributes();
params.alpha=0.7f;
getActivity().getWindow().setAttributes(params);
//點擊其他地方消失
popupWindow_view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
closePopupWindow();
return false;
}
});
}
/***
* 獲取PopupWindow實例
*/
private void getPopupWindow() {
if (null != popupWindow) {
closePopupWindow();
return;
} else {
initPopuptWindow();
}
}
/**
* 關閉窗口
*/
private void closePopupWindow()
{
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
popupWindow = null;
WindowManager.LayoutParams params=getActivity().getWindow().getAttributes();
params.alpha=1f;
getActivity().getWindow().setAttributes(params);
}
}
第二種方法的效果圖如下:
還有就是記得一定要把第一種方案的layout 的背景顏色去掉。謝謝大家