这个有什么用捏,这里举一个例子,当我们使用系统自带的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);
}
分享到:
相关推荐
### Android 获取屏幕、状态栏、标题栏宽高详解 在Android开发过程中,有时我们需要精确地了解设备屏幕的具体尺寸,包括状态栏和标题栏的高度等信息。这对于实现自适应布局、全屏显示等功能至关重要。本文将详细...
- `getWindowVisibleDisplayFrame()` 方法用于获取可见区域的大小,其中`Rect`对象将填充视图的坐标。 2. **计算状态栏高度**: ```java int statusBarHeight = rect.top; ``` - `rect.top` 的值即为状态栏的...
下面的方法通过`getWindowVisibleDisplayFrame`来获取当前Activity可视区域的边界,然后通过计算content view的顶部位置减去状态栏高度得到标题栏高度。 ```java public int getTitleHeight(Activity activity) {...
总的来说,获取屏幕高度、状态栏高度和标题栏高度是Android开发中的基础操作,了解这些可以帮助开发者精确控制界面布局,确保不同设备上的适配效果。在实际开发中,还需要考虑不同Android版本之间的兼容性问题,以及...
标题栏的高度通常需要单独获取,而应用区域的可视部分(不包含状态栏)可以通过`getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1)`获取到的`Rect`对象的`height()`。若需要获取标题栏高度,可以...
总的来说,处理`adjustNothing`模式下的键盘高度需要理解Android窗口管理机制,以及如何监听和计算键盘高度。通过正确地调整输入框位置,我们可以确保在键盘弹出时,用户仍能正常交互。这个过程涉及到Android UI布局...
通过创建一个位图的XY Chart来深入学习Android绘图类Rect、Paint、Bitmap与Canvas,是一种有效掌握Android图形处理机制的方式。在这个过程中,我们将重点理解这些核心类的作用以及它们之间的相互作用,从而能够构建...
在Android平台上,开发一款应用以实现“拍摄矩形固定区域的图片并保存”涉及到了多个技术要点。...通过自定义相机界面、设置拍摄区域和处理保存图片,我们可以创建一个高度定制化的拍照应用,满足特定场景的需求。
本Demo主要展示了如何获取屏幕的大小、屏幕可视大小以及状态栏和虚拟导航栏的高度。以下将详细讲解这些知识点。 1. 屏幕大小: 屏幕大小通常指的是设备的物理尺寸,如对角线英寸数。在Android中,我们通常关心的是...
在IT行业中,编程语言是构建各种软件和应用的基础。...通过学习和理解这些代码,你可以掌握如何在易语言中获取和处理系统任务栏及状态栏的信息。这将对开发桌面应用,尤其是需要与系统交互的工具类软件非常有帮助。
`getDrawingRect(Rect outRect)`方法可以帮助我们获取到View的绘制区域(包括内边距但不包括外边距)。它会将View的边界信息填充到提供的Rect对象中。接着,`getLocationOnScreen(int[] location)`方法用于获取View...
然而,"通过拦截窗口消息实现重绘窗口边框和标题栏"是一种更巧妙的方法,它不需要将`FormBorderStyle`设为`None`,而是利用Windows API(应用程序接口)来处理特定的消息,例如`WM_NCPAINT`消息,这是用来处理非客户...
在这个场景中,"MASM32编程获取任务栏高度"是一个具体的编程任务,它涉及到使用汇编语言(MASM32)来获取Windows任务栏的高度。下面我们将详细探讨这个话题。 首先,MASM32是Microsoft Macro Assembler的32位版本,...
### C#重绘标题栏和边框的知识点 在C#中,自定义窗口的外观是一种常见的需求,尤其是在创建具有独特界面的应用程序时。本文档将详细介绍如何通过C#编程语言来实现对窗体的标题栏和边框进行重绘。 #### 1. 基本概念...
另外,代码中还提供了一个浏览器获取状态栏高度的例子,通过`getGlobalVisibleRect()`方法检查`BrowserFrameLayout`是否可见,并获取其顶部距离,用以设置标题栏的位置。这适用于特定场景,如浏览器应用可能有自定义...
`Rect`类在Android开发中主要用于表示一个矩形区域,该类包含了四个整型成员变量:`left`、`top`、`right`和`bottom`,分别代表矩形左上角的横纵坐标及右下角的横纵坐标。这与Java标准库中的`Rectangle`类有所不同,...
总的来说,易语言取窗口标题栏和边框尺寸涉及的知识点包括:易语言的API调用机制、窗口结构、窗口句柄的获取、窗口样式的查询和调整、以及尺寸计算的方法。掌握这些技能,可以帮助开发者更好地控制和定制Windows应用...