popupwindow 彈出窗體,和對話框類似是輕量級的窗體,可以在窗體中顯示各種效果
1.創建popupwindow 彈出窗體,PopupWindow popupWindow = new PopupWindow(contentView,width,height);
contentView:是要顯示的view對象,後面兩個是高度跟寬度
2.定義一個view對象傳入到contentView中
3.顯示出來popupWindow.showAtLocation(parent,gravity,x,y);
parent:掛載在那個父控件
gravity:指定他的對齊方式,Gravity.LEFT|Gravity.TOP
後面的x和y分別指定與左邊跟上邊的偏移量
//popupwindow的窗體默認是透明的顏色,要指定popuwindow的窗體的背景顏色
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));這裏面的參數是drawable對象,上面的參數指定背景是透明的
上面的程序會有一個問題,就是如果彈出來的窗體後,點擊其他地方窗體是不會消失,相當於對話框一樣了,我們還可以創建另一個構造方法指定這個可以有焦點,那麼如果另的組件搶走這個焦點,這個彈出窗體也會消失了.PopupWindow(contentView,width,height,onFource);後面那個指定是否可以獲取焦點
注意在使用popupWindow的時候一定要給他設置窗體的背景顏色,如果不設置會出現問題,popupWindow不會自動關閉,在popupWindow裏面的動畫效果也不會顯示了
在setOnItemClickListener()事件中的onItemClick()方法,第二個參數view 代表的是listView裏面的每一個顯示的條目
我們可以得到這個條目的位置
int[] location = new int[2];
view.getLocationInWindow(location);//把位置位置存在location數組中
停止popupwindow
if(popupwindow != null && popupwindow.isShowing()){popupwindow.dismiss(); }
有以下幾種情況要取消popupwindow
1.點擊另一條目時
2.屏幕發生滾動時
3.直接點後退會出錯,窗體發生泄漏,因爲popupwindow掛載的窗體被回收了,不會影響程序但是會在log中打印出錯誤日誌,重寫onDestory()方法中去關閉popupwindow
popupwindow可以用xml佈局,用View,inflate()方法創建一個view,然後把這個view做爲popupwindow的view參數傳入,也可以設置動畫,這個佈局設置一個動畫
當popupwindow顯示的時候,如果按了返回按鈕就會報錯,但是不會影響程序運行,因爲popupwindow是掛在一個activity上的,如果activity消失了,但是popupwindow還沒有取消,就會報錯,應該在onDestory()的時候手動停止popupwindow.