PopupWindow詳解

Android的對話框有兩種:PopupWindow和AlertDialog。它們的不同點在于:

成都創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、成都網(wǎng)站建設(shè)與策劃設(shè)計,麻栗坡網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:麻栗坡等地區(qū)。麻栗坡做網(wǎng)站價格咨詢:18980820575

AlertDialog的位置固定,而PopupWindow的位置可以隨意
AlertDialog是非阻塞線程的,而PopupWindow是阻塞線程的

下面介紹PopupWindow的用法:

PopupWindow的位置按照有無偏移分,可以分為偏移和無偏移兩種;按照參照物的不同,可以分為相對于某個控件和相對于父控件

showAsDropDown(View anchor):相對某個控件的位置(正左下方),無偏移
showAsDropDown(View anchor, int xoff, int yoff):相對某個控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相對于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以設(shè)置偏移或無偏移

具體代碼:

private void showPopupWindow(View v) {  //v為父控件
View inflate = LayoutInflater.from(getActivity()).inflate(
				R.layout.pop_del, null); //定義一個布局
		mPopupWindow = new PopupWindow(inflate, 140, 40); //傳入布局,及Popupwindow的寬高
		//如果要實現(xiàn)點擊PopupWindow之外的區(qū)域,關(guān)閉PopupWindow,要增加下面這3個屬性
		mPopupWindow.setFocusable(true);
		mPopupWindow.setOutsideTouchable(true);
		mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
		//PopupWindow彈出及關(guān)閉動畫
		mPopupWindow.setAnimationStyle(R.style.PopAnim);
		int[] location = new int[2];
		v.getLocationOnScreen(location); //獲取父控件在屏幕上的位置坐標(biāo)
		//將Popupwindow顯示在父控件的左邊,location[0]為父控件的橫坐標(biāo),location[1]為父控件的縱坐標(biāo)
		mPopupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0]
				- mPopupWindow.getWidth(), location[1]);
		//設(shè)置布局的點擊監(jiān)聽,點擊PopupWindow之外的區(qū)域,關(guān)閉PopupWindow	
		inflate.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
			if(mPopupWindow != null){
				mPopupWindow.dismiss();
				mPopupWindow = null;
			}
			}
		});

}

mPopupWindow.setFocusable(false):說明PopuWindow不能獲得焦點,即使設(shè)置設(shè)置了背景不為空也不能點擊外面消失,只能由dismiss()消失,但是外面的View的事件還是可以觸發(fā),back鍵也可以順利dismiss掉。

當(dāng)設(shè)置為popuWindow.setFocusable(true);的時候,加上下面兩行設(shè)置背景代碼,點擊外面和Back鍵才會消失

mPopupWindow.setOutsideTouchable(true):設(shè)置顯示PopuWindow之后在外面點擊是否有效。如果為false的話,那么點擊PopuWindow外面并不會關(guān)閉PopuWindow。當(dāng)然這里很明顯只能在Touchable下才能使用。

要讓PopUpWindow dimiss(即點擊PopuWindow之外的地方此或者back鍵PopuWindow會消失),PopUpWindow的背景不能為空。必須在popuWindow.showAsDropDown(v);或者其它的顯示PopuWindow方法之前設(shè)置它的背景不為空:mPopupWindow.setBackgroundDrawable(new BitmapDrawable());


分享名稱:PopupWindow詳解
當(dāng)前路徑:http://muchs.cn/article20/ihcgco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、品牌網(wǎng)站制作自適應(yīng)網(wǎng)站、用戶體驗、網(wǎng)站維護(hù)、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)