Android中PopupWindow點擊窗口之外和返回鍵消失,界面鎖定的實現

這幾天做谷居網android應用到混天暗地的程度了。。

做一個加入靈感集的操作,需要用戶註冊,彈出這麼一個PopupWindow的提示框。

要實現的功能很簡單,點擊稍後提醒以及鍵盤的返回鍵要能退出PopupWindow,爲了達到鼓勵用戶註冊的目的,點擊其他部分窗口不會消失,畢竟咱的目的是更多的用戶註冊不是,點擊返回鍵還能使其消失,畢竟返回鍵離手指頭更近。

當然,我會告訴你點擊其他部分怎麼讓它消失,以及怎麼鎖定後面的界面。往下看吧。

device-2012-12-20-215234.png

 


PopupWindow出現之後,默認的是所有的操作都無效的,除了HOME鍵。而且是可以操作後面的界面的。

想要鎖定後面的界面,很簡單,只需要讓PopupWindow是focusable的。


popupWindow.setFocusable(true);

這樣,顯示的時候,popupWindow獲取啦焦點,後面的內容爲非活動。

但是這樣不能實現點擊屏幕其他部分使其消失,返回鍵也不行。

這時候要給popupWindow設置一個一個BackgroundDrawable,如果你已經定義好佈局,怕破壞掉樣式,只需要設置一個空的Drawable即可。


popupWindow.setBackgroundDrawable(new PaintDrawable());

這樣,點擊屏幕其他部分和返回鍵都能實現使其消失的功能了。

 

我的情況和上面都不一樣,不能讓用戶點一下屏幕其他地方就消失了,人家想註冊呢,不小心碰到屏幕其他地方了,一下就沒了,我可能就少了一個註冊用戶。

我要實現的僅僅是返回鍵使popupwindow消失。這裏需要重寫view的onKeyListener,這個view應該是popwindow的view,當然是最parent的那個view。上代碼。


View layout = inflater.inflate(R.layout.account_dialog,
		(ViewGroup) activity.findViewById(R.id.account_dialog));
layout.setFocusable(true); // 這個很重要
layout.setFocusableInTouchMode(true);

popupWindow = new PopupWindow(layout);
popupWindow.setFocusable(true);

// 重寫onKeyListener
layout.setOnKeyListener(new OnKeyListener() {
	@Override
	public boolean onKey(View v, int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			accountDialog.dismiss();
			accountDialog = null;
			return true;
		}
		return false;
	}
});

 

看明白了嗎?

要讓生成popupwindow的那個view也是focusable的,保險起見,設置FocusableInTouchMode也爲true。

這樣再重寫那個view的onKeyListener就行了。


轉摘自:http://www.houxiyang.com/archives/70/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章