Android学習による可視領域のRectオブジェクトの取得(ステータスバーとタイトルバーの高さをついでに取得する方法)

1849 ワード


これは何の意味がありますか.ここでは、システムが持っているAlertDialogを使用する場合、ダイアログボックスをポップアップした後、上のボタンや携帯電話の戻りボタンを押すだけでダイアログボックスをキャンセルすることができます.ダイアログボックスのビュー領域の外のどこかをクリックしてダイアログボックスを閉じることができれば、今日お話しした知識点を使う必要があります.
 
直接コードを貼って分析しましょう.
 
/**
		 * 
		 *   onTouchEvent  ,      
		 */
		@Override
		public boolean onTouchEvent(MotionEvent event) {
			Log.d("debug", "onTouchEvent");
			Rect rect = new Rect();
			/*
			 * getWindow().getDecorView()   View Window     View,   Window     View,
			 *    View  getWindowVisibleDisplayFrame()              ,
			 *      ,       。
			 */
			getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
			/**
			 *       ,                       :
			 * 
			 * 1.       : 
			 *       ,      rect            
			 * int statusBarHeight = rect.top;
			 * 
			 * 2.       :
			 * getWindow().findViewById(Window.ID_ANDROID_CONTENT);
			 *        View            ,                 。
			 * int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();   
			 * //statusBarHeight               
			 * int titleBarHeight = contentTop - statusBarHeight  
			 */
			Log.d("debug","X :" + (int) event.getRawX() + " Y :"+ (int) event.getRawY());
			/**
			 * Rect  rect   contains  ,          ,                  
			 * rect           。                  ,       。
			 */
			Log.d("debug","is contains :"+ !rect.contains((int) event.getRawX(),(int) event.getRawY()));
			if (!rect.contains((int) event.getRawX(), (int) event.getRawY())) {
				this.dismiss();
				return true;
			}
			return super.onTouchEvent(event);
		}