Android supports-screens 屏幕适配
基本概念
supports-screens用于设置屏幕相关,处于Manifest的子标签中。
使您能够指定应用支持的屏幕尺寸,并为比应用支持的最大屏幕还大的屏幕启用屏幕兼容性模式。请务必始终在应用中使用此元素指定应用支持的屏幕尺寸。
注意:建议不要在屏幕兼容性模式下运行应用,因为它会因缩放而导致界面中出现像素化和模糊。让应用在大屏幕上正常运行的正确方法是遵循屏幕兼容性概览中的说明,并为不同尺寸的屏幕提供备用布局。
如果应用可以适当调整大小以填充整个屏幕,那么它就“支持”指定的屏幕尺寸。由系统应用的标准大小调整方式对于大多数应用来说效果不错,您无需执行任何额外操作即可让应用在比手机更大的屏幕上运行。不过,通常需要通过提供备用布局资源来优化应用的界面,以适应不同的屏幕尺寸。例如,与在手机上运行时相比,您可能需要修改 activity 在平板电脑上的布局。
不过,如果应用在调整大小以适应不同的屏幕尺寸时效果不佳,您可以使用 元素的属性来控制是将应用分发到较小的屏幕,还是使用系统的屏幕兼容性模式放大(“缩放”)界面以适应较大的屏幕。如果您未针对较大屏幕尺寸进行设计,并且标准大小调整方式无法达到理想的效果,则屏幕兼容性模式会通过模拟标准尺寸屏幕和中密度,然后再放大来缩放界面,以使其填充整个屏幕。请注意,这会导致界面像素化和变模糊,因此最好针对大屏幕优化界面。
屏幕兼容性模式简介
只有在万不得已时,才可以针对无法充分利用较大屏幕尺寸的应用使用屏幕兼容模式。建议不要在此模式下运行应用,因为它会导致用户体验不佳。屏幕兼容性模式有两种不同的版本,具体取决于运行应用的设备版本。
在 Android 版本 1.6 至 3.1 中,系统会在“邮票式”窗口中运行您的应用。它会模拟 320dp x 480dp 屏幕,并用黑色边框填充屏幕的剩余区域。
在 Android 3.2 及更高版本上,系统会像在 320dp x 480dp 屏幕上一样绘制布局,然后将其放大以填充屏幕。这通常会导致界面中出现模糊和像素化之类的失真。
语法
<supports-screens android:resizeable=["true"| "false"]android:smallScreens=["true" | "false"]android:normalScreens=["true" | "false"]android:largeScreens=["true" | "false"]android:xlargeScreens=["true" | "false"]android:anyDensity=["true" | "false"]android:requiresSmallestWidthDp="integer"android:compatibleWidthLimitDp="integer"android:largestWidthLimitDp="integer"/>
属性
android:resizeable
指示应用是否可根据不同的屏幕尺寸调整大小。此属性的默认值为 true。如果设置为 false,则系统在大屏幕上会以屏幕兼容性模式运行应用。
此属性已弃用。引入此属性是为了帮助应用从 Android 1.5 过渡到 1.6(首次引入对多屏幕的支持)。请不要使用此属性。
android:smallScreens
指示应用是否支持较小屏幕这种设备类型。 小屏幕指的是宽高比小于“标准”(传统 HVGA)屏幕的屏幕。不支持小屏幕的应用将不适用于采用外部服务(如 Google Play)的小屏幕设备,因为平台几乎无法让此类应用在较小屏幕上正常运行。此属性的默认值为 “true”。
android:normalScreens
指示应用是否支持“标准”屏幕这种设备类型。一直以来,标准屏幕是指 HVGA 中密度屏幕,但 WQVGA 低密度和 WVGA 高密度也被视为标准屏幕。此属性的默认值为“true”。
android:largeScreens
指示应用是否支持较大屏幕这种设备类型。 大屏幕指的是比“标准”手机屏幕大得多的屏幕,虽然应用可以依赖系统调整大小来填充屏幕,还是可能需要特别注意,以充分利用此类屏幕。
此属性的默认值实际上在某些版本之间会有所不同,因此最好始终明确声明此属性。请注意,将其设置为“false”一般会启用屏幕兼容性模式。
android:xlargeScreens
指示应用是否支持超大屏幕这种设备类型。 超大屏幕指的是比“大”屏幕大得多的屏幕(例如平板电脑或更大的设备),虽然应用可以依赖系统调整大小来填充屏幕,还是可能需要特别注意,以充分利用此类屏幕。
此属性的默认值实际上在某些版本之间会有所不同,因此最好始终明确声明此属性。请注意,将其设置为“false”一般会启用屏幕兼容性模式。
android:anyDensity
指示应用是否包含用于适应任何屏幕密度的资源。
对于支持 Android 1.6(API 级别 4)及更高版本的应用,此属性默认为“true”。不应将其设置为“false”,除非您非常确定有必要这样设置才能让应用正常运行。只有在您的应用直接操控位图时才有必要停用此属性(如需了解详情,请参阅支持多种屏幕文档)。
android:requiresSmallestWidthDp
指定所需的最小 smallestWidth。smallestWidth 是必须为应用界面提供的屏幕空间的最短边尺寸(以 dp 为单位),也是可用屏幕的两个尺寸中的最短尺寸。因此,为了使设备与您的应用兼容,设备的 smallestWidth 必须等于或大于此值。(通常,无论屏幕的当前方向如何,此值都是布局支持的“最小宽度”。)
例如,典型手机屏幕的 smallestWidth 为 320dp,7 英寸平板电脑的 smallestWidth 为 600dp,10 英寸平板电脑的 smallestWidth 为 720dp。这些值通常为 smallestWidth,因为它们是屏幕可用空间的最短边尺寸。
与您的值进行比较的尺寸将屏幕装饰和系统界面都考虑在内。例如,如果设备的屏幕上有一些永久性界面元素,则系统会将设备的 smallestWidth 声明为小于实际屏幕尺寸的尺寸,从而考虑这些界面元素,因为这些界面元素是您的界面无法使用的屏幕像素。因此,您使用的值应该是布局所需的最小宽度,无论当前屏幕方向如何。
如果您的应用针对较小屏幕尺寸(小至“小”尺寸或最小宽度 320dp)适当调整大小,则无需使用此属性。否则,您为此属性使用的值应与应用针对最小屏幕宽度限定符 (swdp) 所使用的最小值一致。
注意:Android 系统不会注意此属性,因此它不会影响应用在运行时的行为方式。不过,您可以使用此属性在 Google Play 等服务上为应用启用过滤功能。但是,Google Play 当前不支持使用此属性进行过滤(在 Android 3.2 上)。因此,如果您的应用不支持小屏幕,则应继续使用其他尺寸属性。
该属性是 API 级别 13 中的新增属性。
android:compatibleWidthLimitDp
通过此属性,您可以指定应用支持的“最小屏幕宽度”最大值,从而启用屏幕兼容性模式作为用户可选的功能。如果设备的可用屏幕最小边大于您在此处指定的值,则用户仍可以安装应用,但要在屏幕兼容性模式下运行该应用。默认情况下,屏幕兼容性模式处于停用状态,系统通常会调整布局大小以适应屏幕大小,但用户可以使用系统栏中出现的按钮启用和停用屏幕兼容性模式。
如果您的应用与所有屏幕尺寸兼容,并且其布局可以适当调整大小,则无需使用此属性。
注意:目前,屏幕兼容性模式仅模拟宽度为 320dp 的手机屏幕,因此如果 android:compatibleWidthLimitDp 的值大于 320,则不会应用屏幕兼容性模式。
该属性是 API 级别 13 中的新增属性。
android:largestWidthLimitDp
通过此属性,您可以指定应用支持的“最小屏幕宽度”最大值,从而强制启用屏幕兼容性模式。如果设备的可用屏幕最小边大于您在此处指定的值,那么应用会在屏幕兼容性模式下运行,且用户不能停用该模式。
如果您的应用与所有屏幕尺寸兼容,并且其布局可以适当调整大小,则无需使用此属性。否则,您应首先考虑使用 android:compatibleWidthLimitDp 属性。只有在以下情形才应使用 android:largestWidthLimitDp 属性:您的应用在针对较大屏幕调整大小时无法正常运行,并且屏幕兼容性模式是用户使用您的应用的唯一途径。
现状
屏幕适配的问题在目前的使用中使用还是比较少的,如果后续有使用了可以再关注。
相关文章:
Android supports-screens 屏幕适配
基本概念 supports-screens用于设置屏幕相关,处于Manifest的子标签中。 使您能够指定应用支持的屏幕尺寸,并为比应用支持的最大屏幕还大的屏幕启用屏幕兼容性模式。请务必始终在应用中使用此元素指定应用支持的屏幕尺寸。 注意:建议不要在屏…...
操作系统基础知识介绍之Mixed CriticalitySystems——混合关键系统
一、发展背景 在嵌入式场景中,虽然Linux已经得到了广泛应用,但并不能覆盖所有需求,例如高实时、高可靠、高安全的场合。这些场合往往是实时操作系统 的用武之地。有些应用场景既需要Linux的管理能力、丰富的生态又需要实时操作系统的高实时、…...
【数据结构初阶】详解链表OJ题
目录一.删除链表中等于给定值的节点二.合并有序链表并返回三.链表的回文结构1.反转单链表2.返回非空链表的中间节点四.输出链表倒数第K个节点五.基于给定值x分割单链表六.返回两个链表的第一个中间节点一.删除链表中等于给定值的节点 我们先来看第一题(题目链接): 因为我们需…...
Java基本数据类型变量自动提升、强制类型转换、String基本类型使用
文章目录基本数据类型变量自动提升特殊情况强制类型转换String基本类型使用基本数据类型变量自动提升 规则: 将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型 。 byte、short、char-->int-->…...
Redis锁与幂等性不得不说的故事
前言: 相信很多小伙伴对缓存锁都不陌生,但是简单的缓存锁想要用好还是需要一些功力。本文总结了笔者多年使用缓存所的一些心得,欢迎交流探讨~ 幂等模型: 幂等场景一般由查重写入两步操作组成,两步操作组成一个最小完…...
Spark 应用调优
Spark 应用调优人数统计优化摇号次数分布优化Shuffle 常规优化数据分区合并加 Cache优化中签率的变化趋势中签率局部洞察优化倍率分析优化表信息 : apply : 申请者 : 事实表lucky : 中签者表 : 维度表两张表的 Schema ( batchNum,carNum ) : ( 摇号批次,…...
synchronized 与 volatile 关键字
目录1.前言1.synchronized 关键字1. 互斥2.保证内存可见性3.可重入2. volatile 关键字1.保证内存可见性2.无法保证原子性3.synchronized 与 volatile 的区别1.前言 synchronized关键字和volatile是大家在Java多线程学习时接触的两个关键字,很多同学可能学习完就忘记…...
【0成本搭建个人博客】——Hexo+Node.js+Gitee Pages
目录 1、下载安装Git 2、下载安装Node.js 3、使用Hexo进行博客的搭建 4、更改博客样式 5、将博客上传到Gitee 6、更新博客 首先看一下Hexo的博客的效果。 1、下载安装Git Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本…...
【面试实战】认证授权流程及原理分析
认证授权流程及原理分析 1、认证 (Authentication) 和授权 (Authorization)的区别是什么?2、什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?3、Cookie 和 Session 有什么区别?如何使用Session进行身份验证?1、认证 (Authentication) 和授权 (Authorizatio…...
TPM命令解析之tpm2_startauthsession
参考网址链接:tpm2-tools/tpm2_startauthsession.1.md at master tpm2-software/tpm2-tools GitHub 命令名称 tpm2_startauthsession 功能 启动一个TPM会话。 命令形式 tpm2_startauthsession [OPTIONS] 描述 启动一个TPM会话。默认是启动一个试验(…...
第14章 局部波动率模型
这学期会时不时更新一下伊曼纽尔德曼(Emanuel Derman) 教授与迈克尔B.米勒(Michael B. Miller)的《The Volatility Smile》这本书,本意是协助导师课程需要,发在这里有意的朋友们可以学习一下,思…...
云原生周刊:开源“赢了”,但它可持续吗?
日前召开的 State of Open 会议上,开源“赢了”,但如果政府和企业不站出来确保生态系统在未来的弹性和可持续性,那么它仍然会失败。 OpenUK 首席执行官 Amanda Brock 在开幕式上表示,数字化和开源在过去 5 到 10 年的进步提升了工…...
读《企业IT架构转型之道》
本书还没读完,暂摘抄一些概念,因为自身做的新系统也在转型,从单体式到一体化一年来遇到很多问题有技术上的,也有团队协作的,过程是痛苦且复杂的,所以在刚翻阅前几十页时候,对于淘宝技术团队转型…...
Qt中的QTcpSocket、QWebSocket和QLocalSocket
同时实现了QTcpSocket、QWebSocket和QLocalSocket的简单通讯deamon,支持自动获取本机ip,多个客户端交互。在这个基础上你可以自己加错误检测、心跳发送、包封装解析和客户端自动重连等功能。 获取本机电脑ip: QString Widget::getIp() {QSt…...
枚举学习贴
1. 概述 1.1 是什么 枚举对应英文(enumeration, 简写 enum)枚举是一组常量的集合。可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象 1.2 枚举的二种实现方式 自定义类实现枚举使用 enum 关键字实现枚举 1.3 什么时候用 存在有限…...
【C++】30h速成C++从入门到精通(继承)
继承的概念及定义继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序…...
Java多线程还不会的进来吧,为你量身打造
💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…...
8 神经网络及Python实现
1 人工神经网络的历史 1.1 生物模型 1943年,心理学家W.S.McCulloch和数理逻辑学家W.Pitts基于神经元的生理特征,建立了单个神经元的数学模型(MP模型)。 1.2 数学模型 ykφ(∑i1mωkixibk)φ(WkTXb)y_{k}\varphi\left(\sum_{i1…...
使用QIS(Quantum Image Sensor)图像重建总结(1)
最近看了不少使用QIS重建图像的文章,觉得比较完整详细的还是Abhiram Gnanasambandam的博士论文:https://hammer.purdue.edu/articles/thesis/Computer_vision_at_low_light/20057081 1 介绍 讲述了又墨子的小孔成像原理,到交卷相机…...
【SpringCloud】SpringCloud教程之Nacos实战(二)
目录前言一.Nacos实现配置管理二.Nacos拉取配置三.Nacos配置热更新(自动刷新,不需要重启服务)1.在有Value注入变量所在类添加注解2.新建类用于属性加载和配置热更新四.Nacos多环境配置共享1.多环境共享配置2.配置的加载优先级测试3.配置优先级前言 Nacos实战一&…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
