当前位置: 首页 > article >正文

android 之简述屏幕分辨率、屏幕密度、屏幕最小宽度

一、屏幕分辨率

屏幕分辨率是指屏幕显示的像素数量,通常以水平像素数乘以垂直像素数表示,例如 1920x1080。它直接影响屏幕的显示效果,包括图像的清晰度和细节。不同的设备可能有不同的屏幕分辨率。

1、常见的屏幕分辨率

  • 标准分辨率:
    480x320(HVGA):早期手机屏幕分辨率
    800x480(WVGA):一些旧的平板和手机
    1024x600(WVGA):一些旧的平板
  • 高清分辨率
    1280x720(HD):一些中低端手机和平板
    1920x1080(Full HD):大多数现代手机和平板
    2560x1440(Quad HD):一些高端手机
    3840x2160(4K UHD):一些高端设备
  • 宽屏分辨率
    1366x768(WXGA):一些笔记本和平板
    1920x1080(Full HD):大多数现代设备
    2560x1440(Quad HD):一些高端设备
  • 其他分辨率
    1440x900(WXGA+):一些笔记本
    1600x900(HD+):一些笔记本
    2048x1536(Retina Display):一些iPad
    2560x1600(QXGA):一些高端笔记本

2、获取屏幕分辨率

在 Android 开发中,通过 DisplayMetrics 类可获取设备屏幕分辨率:

    // 屏幕分辨率(以像素为单位)val displayMetrics = Resources.getSystem().displayMetricsval screenWidth = displayMetrics.widthPixelsval screenHeight = displayMetrics.heightPixelsLog.d(TAG, "screen width: $screenWidth, height: $screenHeight")

二、屏幕密度

屏幕密度(Screen Density)是指屏幕单位面积上的像素数量,通常用每英寸像素数(PPI,Pixels Per Inch)来表示。屏幕密度越高,屏幕上显示的像素就越密集,图像也就越清晰。

1、屏幕密度类别(以dpi为单位):

密度类别PPI范围缩放比例
ldpi(低密度)120dpi0.75x
mdpi(中密度)160dpi1.0x
hdpi(高密度)240dpi1.5x
xhdpi(超高密度)320dpi2.0x
xxhdpi(超超高密度)480dpi3.0x
xxxhdpi(超超超高密度)640dpi4.0x

缩放比例是指相对于mdpi(中等密度)的缩放倍数。例如:

  • ldpi的缩放比例是0.75,表示其像素密度是mdpi的75%。
  • hdpi的缩放比例是1.5,表示其像素密度是mdpi的150%。
  • xhdpi的缩放比例是2.0,表示其像素密度是mdpi的200%。

2、获取屏幕密度

在Android开发中,可以通过DisplayMetrics类获取设备的屏幕密度。

	val displayMetrics = Resources.getSystem().displayMetrics// 屏幕密度(以dp为单位)// 屏幕密度是指屏幕上每英寸(in)的像素数(Pixels Per Inch,PPI)。// 它反映了屏幕的物理像素密度。屏幕密度越高,屏幕显示的像素就越密集,图像和文字就越清晰。val density = displayMetrics.density// 屏幕密度(以dpi为单位)//  ldpi(低密度):120dpi//  mdpi(中密度):160dpi//  hdpi(高密度):240dpi//  xhdpi(超高密度):320dpi//  xxhdpi(超超高密度):480dpi//  xxxhdpi(超超超高密度):640dpival densityDpi = displayMetrics.densityDpiLog.d(TAG, "density: $density, densityDpi: $densityDpi")

3、使用屏幕密度(资源限定符)

为了确保应用在不同屏幕密度的设备上都能良好显示,需要为不同密度的屏幕提供不同分辨率的图片资源。Android支持通过资源限定符来实现这一点。例如:

  • drawable-ldpi / mipmap-ldpi:低密度屏幕的图片资源
  • drawable-mdpi / mipmap-mdpi:中等密度屏幕的图片资源
  • drawable-hdpi / mipmap-hdpi:高密度屏幕的图片资源
  • drawable-xhdpi / mipmap-xhdpi:超高密度屏幕的图片资源
  • drawable-xxhdpi / mipmap-xxhdpi:超超高密度屏幕的图片资源
  • drawable-xxxhdpi / mipmap-xxxhdpi:超超超高密度屏幕的图片资源

使用密度无关像素(dp)
在布局文件中,建议使用dp(density-independent pixels)作为单位,而不是像素(px)。dp是一个虚拟像素单位,它会根据屏幕密度自动调整,从而确保UI元素在不同密度的屏幕上保持一致的显示效果。

三、屏幕最小宽度(smallestWidth)

屏幕最小宽度(smallestWidth)是指设备屏幕的最短边的宽度,单位为dp(密度无关像素)。它不会随着屏幕方向的变化而改变,因此非常适合用于布局适配。

1、计算屏幕最小宽度

屏幕最小宽度可以通过以下公式计算:
smallestWidth = 屏幕最短边的像素数 / 屏幕密度比例

例如,如果设备的屏幕分辨率为1080x1920像素,屏幕密度为320dpi,则屏幕最小宽度为:
smallestWidth= 1080 / (320/160) = 540dp
其中,屏幕密度比例(density)为320dpi / 160dpi = 2。

2、使用屏幕最小宽度适配

为了适配不同屏幕尺寸的设备,可以使用 smallestWidth 限定符来创建不同的资源文件夹,系统会根据设备的屏幕最小宽度自动选择对应的资源文件夹。例如:

  • values-sw360dp:适用于最小宽度为360dp的设备
  • values-sw400dp:适用于最小宽度为400dp的设备
  • values-sw600dp:适用于最小宽度为600dp的设备

3、获取设备的屏幕最小宽度

通过 DisplayMetrics 类可获取设备的屏幕最小宽度。

   // 屏幕最小宽度 dp 值val displayMetrics = Resources.getSystem().displayMetricsval screenWidthDp = displayMetrics.widthPixels / displayMetrics.densityval screenHeightDp = displayMetrics.heightPixels / displayMetrics.densityval smallestWidthDp = min(screenWidthDp, screenHeightDp)Log.d(TAG, "Smallest width in dp: $smallestWidthDp")

通过合理使用屏幕最小宽度(smallestWidth)和对应的资源限定符,可以有效实现Android应用的屏幕适配。

相关文章:

android 之简述屏幕分辨率、屏幕密度、屏幕最小宽度

一、屏幕分辨率 屏幕分辨率是指屏幕显示的像素数量,通常以水平像素数乘以垂直像素数表示,例如 1920x1080。它直接影响屏幕的显示效果,包括图像的清晰度和细节。不同的设备可能有不同的屏幕分辨率。 1、常见的屏幕分辨率 标准分辨率&#x…...

mac环境中Nginx安装使用 反向代理

安装 如没有Homebrew 先安装Homebrew 国内镜像: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装成功后安装nginx: brew install nginx 启动nginx: nginx 或者 brew services st…...

2025年3月个人工作生活总结

本文为 2025年3月工作生活总结。 研发编码 一个curl下载失败问题的记录 问题: 某程序,指定IP和账户密码配置,再使用curl库连接sftp服务器,下载文件。在CentOS系统正常,但在某国产操作系统中失败,需要用命…...

实战打靶集锦-36-Deception

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 系统提权6. 写在最后 靶机地址:https://download.vulnhub.com/haclabs/Deception.ova 1. 主机发现 目前只知道目标靶机在192.168.56.xx网段,通过如下的命令,看看这个网段上在线的主…...

前端开发技术演进与就业现实:顺应时代方能不被淘汰-优雅草卓伊凡

前端开发技术演进与就业现实:顺应时代方能不被淘汰-优雅草卓伊凡 在技术浪潮汹涌的当下,常有人发问:“学习CSS、HTML、JS以后可以干什么?”对此,卓伊凡可以明确地给出答案:单纯学习这些过于基础的Web前端开…...

敏捷开发:以人为本的高效开发模式

目录 前言1. 什么是敏捷开发?1.1 敏捷开发的核心理念1.2 敏捷开发的优势 2. 敏捷宣言:四大核心价值观2.1 个体和交互胜过工具和过程2.2 可工作的软件胜过大量的文档2.3 客户合作胜过合同谈判2.4 响应变化胜过遵循计划 3. 敏捷开发的实践3.1 Scrum&#x…...

HarmonyOS 基础组件和基础布局的介绍

1. HarmonyOS 基础组件 1.1 Text 文本组件 Text(this.message)//文本内容.width(200).height(50).margin({ top: 20, left: 20 }).fontSize(30)//字体大小.maxLines(1)// 最大行数.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出显示....fontColor(Color.Black).…...

CAD插入属性块 弹窗提示输入属性值——CAD知识讲堂

插入属性块时,有时会遇到不弹窗输入属性值的情况,解决方案如下: 最好关闭块编辑器并保存,插入属性块即可弹窗。...

Redis 主要能够用来做什么

Redis(Remote Dictionary Server)是一种基于内存的键值存储数据库,它的性能极高,广泛应用于各种高并发场景。以下是 Redis 常见的用途: 1. 缓存(Cache) 作用:存储热点数据&#xf…...

MySQL GROUP BY 和 HAVING 子句中 ‘Unknown column‘ 错误的深入解析

在使用 MySQL 进行数据分析和报表生成时,GROUP BY 和 HAVING 子句是非常强大的工具。然而,很多开发者在使用它们时会遇到一个常见的错误:"Unknown column column_name in having clause"。本文将深入解析这个错误的原因&#xff0c…...

Sentinel实战(三)、流控规则之流控效果及流控小结

spring cloud Alibaba-Sentinel实战(三)、流控效果流控小结 一、流控规则:流控效果一)、流控效果:预热1、概念含义2、案例流控规则设置测试结果 二)、流控效果:排队等待1、概念含义2、案例流控规…...

JavaScrip——DOM编程

一、DOM元素创建与属性操作 1. 元素创建与插入 // 创建新元素 const newDiv document.createElement(div); newDiv.textContent "动态创建的内容";// 插入到容器末尾 document.body.appendChild(newDiv);// 在指定元素前插入 existingElement.before(newDiv);// …...

表单的前端数据流向

在CRM项目中,会涉及很多张表单。每张表单的前端代码都会放在一个单独的文件夹中。这个文件夹下包含三个文件,分别是: index.js(以下称为 index):负责组件的渲染和交互逻辑。model.js(以下称为 …...

PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界

文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月,飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3,充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…...

《二叉树:二叉树的顺序结构->堆》

二叉树一般可以使用两种结构存储,一种是顺序结构,一种是链式结构。 顺序存储 顺序结构存储是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。实际上使用中只有堆才会使用数组来存储。二叉…...

OpenLayers:封装Overlay的方法

平时在使用OpenLayers的Overlay时常感觉不便,于是最近我便封装了一些Overlay增删改查的方法,以提高可用性。这边文章中我会介绍我封装的方法,同时记录这个过程中踩的一些坑。 添加Overlay /*** abstract 添加overlay* param {*} map* param…...

软件重构与项目进度的矛盾如何解决

软件重构与项目进度之间的矛盾可以通过明确重构目标与范围、采用渐进式重构策略、优化项目管理流程、提高团队沟通效率、建立重构意识文化等方式解决。其中,采用渐进式重构策略尤为关键。渐进式重构是指在日常开发过程中,以小步骤持续进行重构&#xff0…...

Mysql+Demo 获取当前日期时间的方式

记录一下使用Mysql获取当前日期时间的方式 获取当前完整的日期时间有常见的四种方式,获取得到的默认格式(mysql的格式标准)是 %Y-%m-%d %H:%i:%s其它格式 %Y-%m-%d %H:%i:%s.%f方式一:now()函数 select now();mysql> select now(); -------------…...

数智化时代下开源AI大模型驱动的新型商业生态构建——基于AI智能名片与S2B2C商城小程序的融合创新研究

摘要 数字技术的指数级发展推动物理世界向数智化网状结构加速转型,传统商业逻辑面临系统性重构。本文以"开源AI大模型AI智能名片S2B2C商城小程序"为研究主体,采用案例分析与技术验证相结合的方法,揭示技术融合对商业生态的重塑机制…...

Spring Cloud Alibaba 技术全景与实战指南

简介: Spring Cloud Alibaba 是阿里巴巴开源的微服务解决方案,基于 Spring Cloud 标准构建,提供了一站式分布式系统开发能力。它深度整合阿里云生态组件,为企业级微服务架构提供高可用、高性能的技术支撑。 核心特性 全栈微服务能…...

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-BiLSTM多变量回归预测&#xf…...

了解 PoE 握手协议在网络配电中的重要性

在现代网络领域,以太网供电(PoE)已成为一项革命性的技术,通过在一根以太网电缆上集成电力和数据传输,简化了网络连接设备的部署和管理。这种无缝操作的核心是 PoE 握手 —— 一个促进支持PoE 的设备之间的通信、确保高效供电和保护网络基础设…...

小智机器人相关函数解析,BackgroundTask::Schedule (***)将一个回调函数添加到后台任务队列中等待执行

以下是对 BackgroundTask::Schedule 函数代码的详细解释&#xff1a; void BackgroundTask::Schedule(std::function<void()> callback) {std::lock_guard<std::mutex> lock(mutex_);if (active_tasks_ > 30) {int free_sram heap_caps_get_free_size(MALLOC_…...

基于Python设计的TEQC数据质量可视化分析软件

标题:基于Python设计的TEQC数据质量可视化分析软件 内容:1.摘要 本文旨在设计一款基于Python的TEQC数据质量可视化分析软件。随着全球导航卫星系统&#xff08;GNSS&#xff09;的广泛应用&#xff0c;数据质量的评估变得至关重要。TEQC&#xff08;TransEditQualityCheck&…...

人月神话:如何有效的避免Bug的产生

bug的来源有很多种&#xff0c;一般的小bug很好修复&#xff0c;最头疼的是哪些致命且难以察觉的Bug。这些bug从哪来的&#xff1f; 在人月神话书中说&#xff1a;假设的不匹配是大多数致命和难以察觉的bug的主要来源。 假设来源于各个组成部分的开发者对概念的理解不一致。 为…...

Git的基础使用方法

本文最终功能&#xff1a; 1.从终端直接传输代码给仓库 2.用终端从仓库克隆文件 基本概念 我们先来理解下 Git 工作区、暂存区和版本库概念&#xff1a; 工作区&#xff1a;就是你在电脑里能看到的目录。 暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .git 目录下的…...

轮胎厂相关笔记

一、术语 图解&#xff1a;https://news.yiche.com/hao/wenzhang/38498703/ 1、胚胎 在轮胎制造行业中&#xff0c;“胎胚”&#xff08;也称“生胎”或“未硫化轮胎”&#xff09;是指轮胎在硫化&#xff08;高温高压固化&#xff09;之前的半成品形态。它是轮胎成型的中间…...

Java常用异步方式总结

使用建议 完整代码见https://gitee.com/pinetree-cpu/parent-demon 提供了postMan调试json文件于security-demo/src/main/resources/test_file/java-async.postman_collection.json 可导入postMan中进行调试 Java异步方式以及使用场景 继承Thread类 新建三个类继承Thread&…...

【Easylive】视频在线人数统计系统实现详解 WebSocket 及其在在线人数统计中的应用

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 视频在线人数统计系统实现详解 1. 系统架构概述 您实现的是一个基于Redis的视频在线人数统计系统&#xff0c;主要包含以下组件&#xff1a; 心跳上报接口&#xff1a;客户端定期调用以…...

tomcat 目录结构组成

文章目录 背景文件结构层级一些常用的路径 背景 现在非常多的 java web 服务部署在 linux 服务器中&#xff0c;我们服务器中的 tomcat 会有各种文件路径&#xff0c;看下它有哪些文件 文件结构层级 ├── bin/ # 核心脚本和启动文件 ├── conf/ # …...