AndroidでPopWindowをクリックしてウィンドウの外とリターンキーが消え、インターフェースロックの実現

2707 ワード

転送先:http://houxiyang.com/archives/70/
 
------------------------------------
 
ここ数日は谷住網and roidをして、混天の暗さに応用しました.
インスピレーションセットに参加する操作をするには、ユーザー登録が必要です.
実現する機能は簡単です.後でリマインダとキーボードのリターンキーをクリックしてPopWindowを脱退します.ユーザー登録を奨励する目的を達成するために、他の部分のウィンドウをクリックしても消えないです.結局、私達の目的はもっと多くのユーザー登録ではないです.リターンキーをクリックしても消えることができます.
もちろん、他の部分をクリックしてどうやって消えますか?また、後ろの画面をロックしますか?下を見てください
 
 
PopupWindowが現れたら、デフォルトはすべての操作が無効になります.HOMEボタンを除いて.また後ろの界面を操作できる.
後ろの画面をロックしたいです.簡単です.ポプラWindowはfocusableです.
 
popupWindow.setFocusable(true);
 
このように、表示する際には、popupWindowにフォーカスをとり、後の内容は非アクティブとなります.
しかし、スクリーンの他の部分をクリックして消すことはできません.リターンキーもだめです.
この場合は、ポップWindowにBackground Drawableをセットします.レイアウトを定義しておけば、スタイルを壊す恐れがあります.空いているDrawableをセットすればいいです.
 
popupWindow.setBackgroundDrawable(new PaintDrawable());
 
このように、スクリーンの他の部分をクリックしてもリターンキーを押しても、消える機能が実現されます.
 
私の状況は上とは違って、ユーザーにスクリーンの他のところを注文して消えてしまいました.登録したいです.うっかりスクリーンの他のところに触れてしまいました.すぐになくなりました.登録ユーザーが少なくなりました.
私が実現したいのはリターンキーだけで、popwindowを消します.ここでviewを書き換える必要があります.この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のです.念のために、Focusable Intouch Modeを設けるのもtrueです.
このようにしてもう一度そのviewのonKeyListenerを書けばいいです.