`

Android学习 之 获取可视区域的Rect对象(顺带获取状态栏和标题栏高度的方法)

阅读更多

 

这个有什么用捏,这里举一个例子,当我们使用系统自带的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);
		}

 

2
2
分享到:
评论

相关推荐

    android获取屏幕,状态栏,标题栏宽高

    ### Android 获取屏幕、状态栏、标题栏宽高详解 在Android开发过程中,有时我们需要精确地了解设备屏幕的具体尺寸,包括状态栏和标题栏的高度等信息。这对于实现自适应布局、全屏显示等功能至关重要。本文将详细...

    Android获得控件和状态栏高度

    - `getWindowVisibleDisplayFrame()` 方法用于获取可见区域的大小,其中`Rect`对象将填充视图的坐标。 2. **计算状态栏高度**: ```java int statusBarHeight = rect.top; ``` - `rect.top` 的值即为状态栏的...

    Android编程实现获取标题栏、状态栏的高度、屏幕大小及模拟Home键的方法

    下面的方法通过`getWindowVisibleDisplayFrame`来获取当前Activity可视区域的边界,然后通过计算content view的顶部位置减去状态栏高度得到标题栏高度。 ```java public int getTitleHeight(Activity activity) {...

    Android 获取屏幕高度,标题高度,状态栏高度(实例代码)

    总的来说,获取屏幕高度、状态栏高度和标题栏高度是Android开发中的基础操作,了解这些可以帮助开发者精确控制界面布局,确保不同设备上的适配效果。在实际开发中,还需要考虑不同Android版本之间的兼容性问题,以及...

    Android如何获取屏幕、状态栏及标题栏的高度详解

    标题栏的高度通常需要单独获取,而应用区域的可视部分(不包含状态栏)可以通过`getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1)`获取到的`Rect`对象的`height()`。若需要获取标题栏高度,可以...

    android adjustNothing下获取键盘高度

    总的来说,处理`adjustNothing`模式下的键盘高度需要理解Android窗口管理机制,以及如何监听和计算键盘高度。通过正确地调整输入框位置,我们可以确保在键盘弹出时,用户仍能正常交互。这个过程涉及到Android UI布局...

    通过创建一个位图的XY Chart来学习Android绘图类Rect

    通过创建一个位图的XY Chart来深入学习Android绘图类Rect、Paint、Bitmap与Canvas,是一种有效掌握Android图形处理机制的方式。在这个过程中,我们将重点理解这些核心类的作用以及它们之间的相互作用,从而能够构建...

    Android拍摄矩形固定区域的图片并保存

    在Android平台上,开发一款应用以实现“拍摄矩形固定区域的图片并保存”涉及到了多个技术要点。...通过自定义相机界面、设置拍摄区域和处理保存图片,我们可以创建一个高度定制化的拍照应用,满足特定场景的需求。

    Android 获取屏幕相关数据的demo

    本Demo主要展示了如何获取屏幕的大小、屏幕可视大小以及状态栏和虚拟导航栏的高度。以下将详细讲解这些知识点。 1. 屏幕大小: 屏幕大小通常指的是设备的物理尺寸,如对角线英寸数。在Android中,我们通常关心的是...

    易语言获取系统任务栏信息

    在IT行业中,编程语言是构建各种软件和应用的基础。...通过学习和理解这些代码,你可以掌握如何在易语言中获取和处理系统任务栏及状态栏的信息。这将对开发桌面应用,尤其是需要与系统交互的工具类软件非常有帮助。

    Android判断touch事件点是否在view范围内的方法

    `getDrawingRect(Rect outRect)`方法可以帮助我们获取到View的绘制区域(包括内边距但不包括外边距)。它会将View的边界信息填充到提供的Rect对象中。接着,`getLocationOnScreen(int[] location)`方法用于获取View...

    C#修改标题栏和边框颜色

    然而,"通过拦截窗口消息实现重绘窗口边框和标题栏"是一种更巧妙的方法,它不需要将`FormBorderStyle`设为`None`,而是利用Windows API(应用程序接口)来处理特定的消息,例如`WM_NCPAINT`消息,这是用来处理非客户...

    MASM32编程获取任务栏高度

    在这个场景中,"MASM32编程获取任务栏高度"是一个具体的编程任务,它涉及到使用汇编语言(MASM32)来获取Windows任务栏的高度。下面我们将详细探讨这个话题。 首先,MASM32是Microsoft Macro Assembler的32位版本,...

    Android 取得状态栏、任务栏高度的小例子

    另外,代码中还提供了一个浏览器获取状态栏高度的例子,通过`getGlobalVisibleRect()`方法检查`BrowserFrameLayout`是否可见,并获取其顶部距离,用以设置标题栏的位置。这适用于特定场景,如浏览器应用可能有自定义...

    C#重绘标题栏和边框

    ### C#重绘标题栏和边框的知识点 在C#中,自定义窗口的外观是一种常见的需求,尤其是在创建具有独特界面的应用程序时。本文档将详细介绍如何通过C#编程语言来实现对窗体的标题栏和边框进行重绘。 #### 1. 基本概念...

    知识共享-Android_开发Rect(雷惊风).

    `Rect`类在Android开发中主要用于表示一个矩形区域,该类包含了四个整型成员变量:`left`、`top`、`right`和`bottom`,分别代表矩形左上角的横纵坐标及右下角的横纵坐标。这与Java标准库中的`Rectangle`类有所不同,...

    易语言取窗口标题栏和边框尺寸源码

    总的来说,易语言取窗口标题栏和边框尺寸涉及的知识点包括:易语言的API调用机制、窗口结构、窗口句柄的获取、窗口样式的查询和调整、以及尺寸计算的方法。掌握这些技能,可以帮助开发者更好地控制和定制Windows应用...

Global site tag (gtag.js) - Google Analytics