免费试用

中文化、本土化、云端化的在线跨平台软件开发工具,支持APP、电脑端、小程序、IOS免签等等

android 开发displaycutout

在 Android 9.0 及以上版本中,谷歌推出了 DisplayCutout API,这个 API 是为了适配全面屏手机而生的。DisplayCutout API 可以让开发者获取到屏幕中的刘海(或水滴屏)信息,以便于在应用中进行相应的适配。下面我们来详细介绍一下 DisplayCutout API 的原理和使用方法。

一、原理

在全面屏手机上,由于屏幕顶部或者底部有刘海或者水滴屏等特殊形状,因此需要在应用中进行适配。在 Android 9.0 及以上版本中,谷歌推出了 DisplayCutout API,这个 API 可以让开发者获取到屏幕中的刘海信息,以便于在应用中进行相应的适配。

具体来说,DisplayCutout API 主要通过以下两种方式获取刘海信息:

1. 通过 WindowInsets#getDisplayCutout() 方法获取 DisplayCutout 对象,该对象包含了刘海的位置和大小信息。getDisplayCutout() 方法返回的 DisplayCutout 对象可能为 null,表示当前屏幕不存在刘海或者水滴屏等特殊形状。

2. 通过 WindowInsets#getSystemWindowInsetTop() 方法获取状态栏的高度,该高度包含了刘海的高度。如果状态栏的高度大于 0,则说明当前屏幕存在刘海或者水滴屏等特殊形状。

二、使用方法

下面我们来介绍一下如何使用 DisplayCutout API 来适配全面屏手机。

1. 获取 DisplayCutout 对象

我们可以通过 WindowInsets#getDisplayCutout() 方法获取 DisplayCutout 对象,该对象包含了刘海的位置和大小信息。如果当前屏幕不存在刘海或者水滴屏等特殊形状,则 getDisplayCutout() 方法会返回 null。

下面是一个简单的示例代码:

```

View rootView = getWindow().getDecorView().getRootView();

rootView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {

@Override

public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {

DisplayCutout displayCutout = windowInsets.getDisplayCutout();

if (displayCutout != null) {

// 处理刘海信息

}

return windowInsets;

}

});

```

在这个示例代码中,我们通过 rootView 的 setOnApplyWindowInsetsListener() 方法来监听 WindowInsets 的变化。当 WindowInsets 发生变化时,我们可以通过 getDisplayCutout() 方法获取 DisplayCutout 对象,从而获取刘海的位置和大小信息。

2. 处理刘海信息

获取到 DisplayCutout 对象后,我们可以通过以下方法获取刘海的位置和大小信息:

- getSafeInsetTop():获取刘海顶部安全区域的高度。

- getSafeInsetBottom():获取刘海底部安全区域的高度。

- getSafeInsetLeft():获取刘海左侧安全区域的宽度。

- getSafeInsetRight():获取刘海右侧安全区域的宽度。

下面是一个简单的示例代码:

```

View rootView = getWindow().getDecorView().getRootView();

rootView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {

@Override

public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {

DisplayCutout displayCutout = windowInsets.getDisplayCutout();

if (displayCutout != null) {

int safeInsetTop = displayCutout.getSafeInsetTop();

int safeInsetBottom = displayCutout.getSafeInsetBottom();

int safeInsetLeft = displayCutout.getSafeInsetLeft();

int safeInsetRight = displayCutout.getSafeInsetRight();

// 处理刘海信息

}

return windowInsets;

}

});

```

在这个示例代码中,我们通过 getSafeInsetTop()、getSafeInsetBottom()、getSafeInsetLeft() 和 getSafeInsetRight() 方法来获取刘海的位置和大小信息。

3. 适配布局

获取到刘海的位置和大小信息后,我们可以通过以下方式来适配布局:

- Padding 方式:在布局中添加 padding,以避免内容被刘海覆盖。

- Margin 方式:在布局中添加 margin,以避免内容与刘海重叠。

- 剪裁方式:可以通过 setClipToPadding() 方法或者 setClipChildren() 方法来剪裁布局,以避免内容被刘海覆盖。

下面是一个简单的示例代码:

```

View rootView = getWindow().getDecorView().getRootView();

rootView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {

@Override

public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {

DisplayCutout displayCutout = windowInsets.getDisplayCutout();

if (displayCutout != null) {

int safeInsetTop = displayCutout.getSafeInsetTop();

int safeInsetBottom = displayCutout.getSafeInsetBottom();

int safeInsetLeft = displayCutout.getSafeInsetLeft();

int safeInsetRight = displayCutout.getSafeInsetRight();

// 适配布局

view.setPadding(safeInsetLeft, safeInsetTop, safeInsetRight, safeInsetBottom);

}

return windowInsets;

}

});

```

在这个示例代码中,我们通过 setPadding() 方法来给 rootView 添加 padding,以避免内容被刘海覆盖。

总结

DisplayCutout API 是为了适配全面屏手机而生的,通过该 API,开发者可以获取到屏幕中的刘海信息,以便于在应用中进行相应的适配。在使用 DisplayCutout API 时,我们需要注意以下几点:

- 通过 WindowInsets#getDisplayCutout() 方法获取 DisplayCutout 对象,该对象包含了刘海的位置和大小信息。getDisplayCutout() 方法返回的 DisplayCutout 对象可能为 null,表示当前屏幕不存在刘海或者水滴屏等特殊形状。

- 通过 DisplayCutout#getSafeInsetTop()、getSafeInsetBottom()、getSafeInsetLeft() 和 getSafeInsetRight() 方法来获取刘海的位置和大小信息。

- 可以通过 Padding 方式、Margin 方式或者剪裁方式来适配布局,以避免内容被刘海覆盖。


相关知识:
android我的页面
Android是目前最流行的移动操作系统之一,因为它的开放性和广泛的应用。在Android应用程序中,我的页面被认为是一个非常重要的界面,因为它提供了用户个性化的信息和设置选项。在本文中,我们将详细介绍Android我的页面的原理和实现。一、什么是Andr
2023-04-06
python打包成安卓app
Python是一种非常流行的编程语言,广泛应用于各种领域。然而,Python的运行环境并不是所有的设备都默认安装的,这就限制了Python应用的普及范围。为了解决这个问题,我们可以将Python程序打包成安卓App,使得用户可以直接在手机上运行Python
2023-04-06
vue打包成app方法
Vue是一个流行的JavaScript框架,用于构建单页面应用程序(SPA)。随着移动设备和移动应用程序的普及,许多人想知道如何使用Vue构建移动应用程序。在本文中,我们将讨论如何将Vue应用程序打包成移动应用程序。Vue应用程序的打包和构建过程与其他Ja
2023-04-06
网址制作成apk
将网址制作成apk是一种将网页应用程序化的方法,使其可以在移动设备上运行。这种方法可以使用户更方便地访问网站,并且可以使网站更容易被推广和传播。下面将介绍两种将网址制作成apk的方法。方法一:使用在线工具制作有一些在线工具可以帮助我们将网址制作成apk,如
2023-04-06
ipa软件资源
IPA是iOS上的一种应用程序格式,它类似于Windows操作系统中的.exe文件。IPA文件包含应用程序的二进制文件以及其他资源,例如图像,声音和其他数据。IPA文件可以通过iTunes或其他第三方工具安装在iOS设备上。在本文中,我们将深入探讨IPA文
2023-04-06
html 打包成exe 工具
HTML是一种标记语言,用于创建Web页面。在Web开发中,HTML是必不可少的一部分。但是,在某些情况下,我们可能需要将HTML文件打包成一个可执行文件,以便于在没有浏览器的情况下运行。本文将介绍HTML打包成EXE的原理和一些工具。1. 原理将HTML
2023-04-06
网页链接封装成app
网页链接封装成app是一种将网页内容打包成一个应用程序的方法。这种方法可以让用户无需打开浏览器,直接以应用程序的形式访问网页。这种方法的应用范围非常广泛,可以用于电子商务、社交媒体、新闻、娱乐等各个领域的网站。原理:网页链接封装成app的原理是通过将网页内
2023-04-06
目录 打包成 apk
打包成 APK 是 Android 应用开发中非常重要的一步,它将我们开发好的应用程序打包成一个安装包,方便用户下载和安装。在此,我将详细介绍打包成 APK 的原理和步骤。首先,我们需要了解 APK 的构成。APK 实际上是一个 ZIP 压缩文件,它包含了
2023-04-06
ios打包平台
iOS打包平台是指用于将iOS应用程序打包成IPA文件并进行发布的平台。在iOS开发中,打包是一个非常重要的环节,因为只有通过打包才能将应用程序发布到App Store上供用户下载和使用。本文将从原理和详细介绍两个方面来介绍iOS打包平台。一、原理iOS打
2023-04-06
build app打包
Build app打包是将开发者编写的源代码转换为可在设备上运行的应用程序的过程。在Android和iOS平台上,打包的过程是不同的,下面我们将分别介绍。一、Android平台打包1. Gradle在Android Studio中,Gradle是默认的构建
2023-04-06
打包apk框架
打包apk框架是指将Android应用程序的源代码、资源文件和第三方库等各种资源整合在一起,并打包成一个APK文件的过程。APK文件是Android应用程序的标准安装包,可以在各种Android设备上进行安装和运行。下面将介绍打包apk框架的原理和详细步骤
2023-04-06
九、一门APP基础打包
一门APP基础打包如图:基础功能介绍!!!这是APP基础功能,开通苹果或安卓其他功能,需以开通正式版为前提!——下面所有的增值高级功能,都必须再开通正式版的基础上才会有效!苹果基础打包:128元!安卓技术打包:48元!
2017-04-24