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);
}