iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >API如何处理Android安全距离
  • 443
分享到

API如何处理Android安全距离

2023-07-02 10:07:02 443人浏览 独家记忆
摘要

本篇内容主要讲解“api如何处理Android安全距离”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“API如何处理Android安全距离”吧!前言在Android屏幕的空间中,大部分的区域我们都

本篇内容主要讲解“api如何处理Android安全距离”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“API如何处理Android安全距离”吧!

前言

在Android屏幕的空间中,大部分的区域我们都是可以随意绘制,只有一部分区域是显示的固定内容:

  • 状态栏

  • 标题栏(ActionBar)

  • 页面内容(Content)

  • 导航栏

其中标题栏是可选的,除了Material风格的应用应用的并不多,页面内容就是android.R.id.content是Activity的主要内容。

而我们主要需要讨论的就是 状态栏和导航栏,因为这两个区域在不同设备类型,不同的Android版本和不同的厂商下大小和效果是不同的,等等。这些差异无疑增加了我们做页面适配的复杂程度,也更容易出现兼容问题。

在2017年下半年iPhone X的发布,引入了刘海屏设备,导致了蓝绿大厂争相效仿,同时又自成一派,颇有一番百家争鸣之象。 这也导致了一个新的问题 刘海区域适配 ,那时候Android才8.1,并没有API来支持这屏幕上这多出来的一块区域,不过好在大部分设备在定制时刘海和状态栏高度是一致的

终于在2018年发布的Android 9中Google正式支持了刘海屏,定制了规范约束了设备厂商,减轻了刘海屏适配的差异问题,但是根源问题并没有解决。因为刘海区域的存在,可能会出现页面内容被遮挡,比如:启用页广告跳过按钮被遮挡的问题,导致被应用商店拒掉的风险。

不过好在Android 9中要求刘海设备必须有以下行为:

  • 一条边缘最多只能包含一个刘海。

  • 一台设备不能有两个以上的刘海。

  • 设备的两条较长边缘上不能有刘海。

  • 在未设置特殊标志的竖屏模式下,状态栏的高度必须与刘海的高度持平。

  • 默认情况下,在全屏模式或横屏模式下,整个刘海区域必须显示黑边。

刘海高度默认是和状态栏高度一致依旧没有变,所以问题又回到了状态栏区域的处理。

描述

所以肯定有同学说了:直接获取状态栏高度不就可以了适配刘海屏了。像这样:

val top = context.getStatusBarHeight()titleBar.setPadding(0, top, 0, 0)

这么说也没有错,大部分情况下是没有问题的。但是既然官方已经适配刘海屏了,也为我们提供了新的API为什么不用呢:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {    window.decorView.post {        val top = window.decorView.rootWindowInsets?.displayCutout?.safeInsetTop ?: 0        // val bottom = window.decorView.rootWindowInsets?.displayCutout?.safeInsetBottom ?: 0        titleBar.setPadding(0, top, 0, 0)    }}

上面的方案实际上可以获取上下左右四个方向的安全距离,但大部分情况我们只需要处理顶部就可以了。实际上这已经可以解决我们的问题了,但是还有更好的解决方案方案:

添加依赖:

implementation 'androidx.core:core:1.7.0'// 老版本也可以,但是getInsets() API 还没添加// implementation 'androidx.core:core:1.3.0'

使用ViewCompat工具:

ViewCompat.setOnApplyWindowInsetsListener(titleBar) { view: View, insets: WindowInsetsCompat ->    //val top = insets.systemWindowInsetTop // 高版本已经过时,可以用下面的api替换    val stableInsets = insets.getInsets(    WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout())    titleBar.setPadding(0, stableInsets.top, 0, 0)    return@setOnApplyWindowInsetsListener insets}

实际上屏幕安全距离,基本上全部围绕这一个API,Google也推荐我们这么做,在很多系统控件都能看到它的影子,比如:AppBarLayout、DrawerLayout、NavigationBarView等等都有用到,内部都是来处理系统安全距离的。

系统栏适配

上面提到了手机有各种系统栏(状态栏、导航栏),如果一个全屏+刘海屏+透明系统栏+屏幕旋转的页面处理这些安全距离就更复杂,比如短视频页,这里先给大家列几条可能出现的问题:

  • 没有导航栏或者可以动态隐藏导航栏的设备

  • 导航栏不会旋转的设备(就是导航栏一直在屏幕的一个边,不会跟随屏幕旋转)

  • 导航栏跟随屏幕旋转的设备(主要是手势导航的设备和一些平板上)

  • 刘海在屏幕底部的设备(开发者选项可以开启双刘海模式,设备两个短边都有刘海)

  • 底部刘海+导航栏一起显示的设备

  • ... ...

这些所有的问题通过 ViewCompat.setOnApplyWindowInsetsListener() 来优雅处理, 通过 WindowInsetsCompat.getInsets(type) 可以获取系统的各个栏的大小, 我们也可以同时获取多个系统栏的高度,各个距离内部会进行累加,返回一个类似Rect的对象,对应屏幕的左上右下需要插入的距离:

val stableInsets = insets.getInsets(    WindowInsetsCompat.Type.statusBars() or    WindowInsetsCompat.Type.navigationBars() or    WindowInsetsCompat.Type.displayCutout())

然后在对不同位置的控件添加对应的边距。除了上面提到的三种类型的安全距离,还有一些其他的类型,有兴趣的可以自己了解。

其他适配

ViewCompat.setOnApplyWindowInsetsListener()能解决大部分安全距离的问题,但是有一点它是处理不了的,就是 屏幕圆角,这些安全距离的计算是不处理屏幕圆角的,所以如果有圆角要处理那我们就要另辟蹊径了。

好在Android 12中官方添加了对圆角的支持:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {    val roundedCorner = insets.toWindowInsets()        ?.getRoundedCorner(RoundedCorner.POSITION_TOP_LEFT)    roundedCorner?.center}

我用了Pixel4真机发现能获取到数据,但是模拟器获取不到。

除了圆角支持,还有对隐私指示器提供了支持:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {    val rect = insets.toWindowInsets()?.privacyIndicatorBounds    // 页面控件需要避开这个区域,不然可能会被遮挡}

隐私指示器的范围,主要是 摄像头和麦克风 使用中状态的指示器边界,如果是录制直播或者相机的页面需要处理这个区域。

除了圆角以外,好像没有找到官方对打孔屏的支持,可能后面会加入对打孔屏的支持吧。

到此,相信大家对“API如何处理Android安全距离”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: API如何处理Android安全距离

本文链接: https://www.lsjlt.com/news/341094.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • API如何处理Android安全距离
    本篇内容主要讲解“API如何处理Android安全距离”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“API如何处理Android安全距离”吧!前言在Android屏幕的空间中,大部分的区域我们都...
    99+
    2023-07-02
  • API处理Android安全距离详情
    目录前言描述系统栏适配其他适配前言 在Android屏幕的空间中,大部分的区域我们都是可以随意绘制,只有一部分区域是显示的固定内容: 状态栏标题栏(ActionBar)页面内容(Co...
    99+
    2024-04-02
  • Android监听ScrollView滑动距离的简单处理
    本文实例为大家分享了Android监听ScrollView滑动距离的具体方法,供大家参考,具体内容如下 使用ScrollView时,有时候我们需要要获取它滑动的距离,Android的...
    99+
    2024-04-02
  • MySQL中geometry类型如何处理经纬度距离
    这篇文章给大家分享的是有关MySQL中geometry类型如何处理经纬度距离的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。建表CREATE TABLE `map` ( `id...
    99+
    2024-04-02
  • php接口安全如何处理
    PHP接口安全处理涉及以下几个方面:1. 接口鉴权:通过在接口请求中加入身份验证信息,如API密钥或令牌,对接口进行鉴权。可以使用基...
    99+
    2023-09-28
    php
  • Nagios如何处理安全性和权限管理
    Nagios本身并不具备安全性和权限管理功能,但可以通过以下方式来增强安全性和权限管理: 使用SSL/TLS加密:通过配置Nag...
    99+
    2024-03-13
    Nagios
  • API开发中如何保证安全性?
    随着互联网技术的发展,API已经成为了许多公司的标配,它们可以让公司更好地提供服务、管理数据,并与其他应用程序进行交互。但是,在API开发过程中,安全性是需要考虑的重要因素之一。本文将介绍API开发中需要考虑的安全性问题,并提供一些解决方...
    99+
    2023-10-17
    npm api 二维码
  • 如何实现离线安装全局node模块
    这篇文章主要为大家展示了“如何实现离线安装全局node模块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现离线安装全局node模块”这篇文章吧。准备工作安...
    99+
    2024-04-02
  • 如何对Java项目进行安全处理
    本篇文章为大家展示了如何对Java项目进行安全处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、URL中参数显示问题,解决方案:普通Get请求修改为Post请求参数加密(js加密,Java解密)...
    99+
    2023-05-31
    java ava
  • SSL证书安全检验失败如何处理
    SSL证书安全检验失败可能是由于证书过期、证书无效、证书链不完整等原因导致的。处理方法如下: 检查证书有效性:确保证书未过期,并且...
    99+
    2024-05-09
    SSL证书
  • Teradata如何处理数据安全性和权限管理
    Teradata通过以下方式来处理数据安全性和权限管理: 数据加密:Teradata支持数据加密技术,可以对数据进行加密,保护数...
    99+
    2024-04-09
    Teradata
  • JavaScript 和 PHP API:如何处理路径?
    在 Web 开发中,处理路径是一项非常基础且常见的任务。路径可以是文件路径、URL 路径或者其它形式的路径。JavaScript 和 PHP 都提供了相应的 API 来处理路径,本文将介绍如何使用这些 API。 JavaScript AP...
    99+
    2023-11-10
    api javascript path
  • PHP中如何处理RESTful API错误?
    PHP中如何处理RESTful API错误?RESTful API是一种常见的用于构建网络应用程序的架构风格。在使用RESTful API时,需要考虑如何处理错误,以提供友好的错误提示和适当的错误处理机制。本文将介绍在PHP中如何处理RES...
    99+
    2023-12-09
    PHP restful 错误处理
  • Python 框架的 HTTP API:如何确保安全性?
    在现代软件开发中,HTTP API 已经成为了不可或缺的一部分,它为我们提供了一种便捷的方式来与其他应用程序进行通信。Python 作为一门广泛使用的编程语言,也提供了许多不同的框架来帮助开发者构建和管理 HTTP API。然而,随着应用...
    99+
    2023-10-06
    框架 api http
  • win7系统本地安全策略如何隔离病毒
    这篇文章给大家分享的是有关win7系统本地安全策略如何隔离病毒的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在Win7系统桌面开始菜单中,打开运行窗口,输入secpol.msc命令并回车,打开本地组安全策略。接着...
    99+
    2023-06-28
  • 批处理如何实现Ip安全策略脚本
    这篇文章主要介绍了批处理如何实现Ip安全策略脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。"netsh"是Windows 2000/XP/2003操作...
    99+
    2023-06-08
  • 如何在Python中处理网络安全的问题
    如何在Python中处理网络安全的问题随着互联网的普及和发展,网络安全问题日益突出。对于程序员而言,在开发过程中要时刻关注网络安全,防止黑客攻击和数据泄露。Python作为一种高级编程语言,具有强大的网络编程功能,提供了丰富的库和模块来处理...
    99+
    2023-10-22
    网络安全 Python 处理
  • PHP中如何安全地处理MySQL中的0值?
    PHP中如何安全地处理MySQL中的0值? 在PHP开发中,经常会涉及到与MySQL数据库进行交互并处理各种数据。在处理数据库中的0值时,我们需要注意一些安全性的问题,以避免出现意外的...
    99+
    2024-02-28
    mysql php 安全处理 防止sql注入
  • ASP API中如何处理并发请求?
    在现代互联网应用程序中,处理并发请求是必不可少的。ASP API提供了一些机制来处理并发请求,以确保您的应用程序能够保持高效和稳定。在本文中,我们将探讨ASP API中的一些最佳实践来处理并发请求。 1.使用异步方法 在ASP API中,...
    99+
    2023-07-28
    api 并发 数据类型
  • 使用Rest如何对API进行处理
    这篇文章给大家介绍使用Rest如何对API进行处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、项目目标动静分离的架构,即客户端和服务器端的分离,客户端可以是IOS、android或者静态的页面。需要服务器端提供w...
    99+
    2023-05-31
    rest api
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作