【Android】 dp与sp,加冕为王

目录

重要概念

屏幕尺寸

屏幕分辨率

屏幕像素密度

基础知识:

ppi

pt

DPI 的定义和重要性

Android 中的 DPI 级别

px

dp(Density Independent Pixels)

sp(Scale-independent Pixels)

安卓的dp/dip、sp 虚拟尺寸单位 ,不受ppi的影响

Android 基本布局

安卓文字排版标准

单位之间的转换

实际应用


重要概念


屏幕尺寸

  1. 含义:手机对角线的物理尺寸
  2. 单位:英寸(inch),1英寸=2.54cm

屏幕分辨率

  1. 含义:手机在横向、纵向上的像素点数总和
  2. 例子:1920x1080,即高度方向上有1920个像素点,宽度方向上有1080个像素点
  3. 单位:px(pixel),1px=1像素点
  4. Android手机常见的分辨率:320x480、480x800、720x1280、1080x1920

屏幕像素密度

  1. 含义:每英寸的像素点数
  2. 单位:dpi(dots per ich)

基础知识:

ppi

ppi是“每英寸像素数”,用来衡量屏幕的像素密度。它定义了每英寸长度内有多少像素点。ppi越高,屏幕显示的内容就越清晰。例如,一个320ppi的屏幕比一个160ppi的屏幕有更高的像素密度。

ppi 指每英寸所拥有的像素数 ,即每英寸像素。 像素密度越高,代表屏幕图像显示越清晰。

  

  同样 5 英寸的屏幕,像素数多,屏幕像素密度大,屏幕更清晰;

  

pt

pt是“磅”,是一种传统的打印和显示行业中使用的单位,主要用于打印文档。在Android中,1pt约等于1/72英寸。由于pt是基于物理尺寸的,它在不同设备上的显示效果可能不同。

DPI 的定义和重要性

DPI 是一个物理度量,表示每英寸长度内可以显示的像素点数。一个较高的 DPI 值意味着屏幕每英寸可以显示更多的像素,从而提供更清晰、更细腻的显示效果。DPI 的单位通常是像素/英寸(PPI,即 Pixels Per Inch)。

当DPI的概念用在计算机屏幕上时,就应称之为PPI(Pixels Per Inch)。

同理: PPI就是计算机屏幕上每英寸可以显示的像素点的数量。你说 DPI大伙也能理解。

对于手机屏幕,点和像素是一个意思,理论上ppi和dpi应该是一个东西,但是由于ppi五花八门,在按比例放大的时候会出现半个像素的情况,所以人为规定了几个特殊的dpi取值,比如160、240、320等,完美解决了问题,同时导致手机屏幕的ppi和dpi不再相等。

Windows系统默认PPI 为96, Mac OS系统默认PPI 为72。

假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,

则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向)

160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。

不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的,也有800x480分辨率的,前者的像素密度就比较低。

Android 中的 DPI 级别

Android 系统将屏幕分为以下几个主要的 DPI 级别:

  • ldpi (Low Density): 约120 DPI
  • mdpi (Medium Density): 约160 DPI
  • hdpi (High Density): 约240 DPI
  • xhdpi (Extra High Density): 约320 DPI
  • xxhdpi (Extra Extra High Density): 约480 DPI
  • xxxhdpi (Extra Extra Extra High Density): 约640 DPI

这些 DPI 级别是相对于 mdpi 的基准值,mdpi 被定义为160 DPI。

px

px代表“像素”,是屏幕上最小的点。像素是硬件层面的度量单位,与屏幕的分辨率直接相关。不同设备的像素密度可能不同,因此px不适合用于跨设备布局设计

px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同

就是一个颜色点,一个像素点,最小的单位。不同的颜色点组成一张图像,因此图像的基本单位是像素px。它是一个相对单位,在不同的密度单位下能变大变小。同样是1英寸的屏幕,密度越大,像素越多,则单个像素的物理尺寸越小。
像素数量px = 像素密度ppi x 屏幕尺寸in
所以在屏幕尺寸一定的情况下,密度越大,像素数量越多,显示效果就会越清晰。

像素px主要用来描述图像大小和显示器分辨率:

  1. 相机所说的像素,其实就是最大像素的意思,像素是分辨率的单位,这个像素值仅仅是相机所支持的有效最大分辨率。
    1. 30万 640*480
    2. 50万 800×600
    3. 80万 1024×768 5” (3.5×5英寸)
  2. 我们常说一张100kb大小的图片,指的是图片的体积。一张图像在存储时,会描述每个像素点的颜色信息、位置、数量,这些描述数据就是图片的体积,如果像素越多自然图像体积越大。

例如:

假设你设计了一个109×109px的蓝色方块,并且这个方块的物理尺寸为1×1英寸。

如果你的屏幕是72PPI的,那这个方块看起来就要比实际的物理尺寸更大点,因为72PPI的屏幕要显示109px差不多需要1.5英寸才行。

dp(Density Independent Pixels)

dp是Android中最基本的单位之一,它代表的是“密度无关像素”。dp的目的是让开发者能够创建不依赖于屏幕密度的布局。1dp在不同密度的屏幕上看起来是相同的物理大小。

例如,1dp在160ppi的屏幕上可能对应1像素,但在320ppi的屏幕上可能对应2像素。

它与“像素密度”密切相关

Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。

例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不多”,这就是使用dp作为单位的效果。

  1. dp就是为了使得开发者设置的长度能够根据不同屏幕(分辨率/尺寸也就是dpi)获得不同的像素(px)数量。
    1. 比如:我将一个控件设置长度为1dp,那么在160dpi上该控件长度为1px,在240dpi的屏幕上该控件的长度为1*240/160=1.5个像素点。
    2. 也就是dp会随着不同屏幕而改变控件长度的像素数量。
  2. 关于dp的官方叙述为:
    1. 当屏幕每英寸有160个像素时(也就是160dpi),dp与px等价的。那如果每英寸240个像素呢?1dp—>1*240/160=1.5px,即1dp与1.5px等价了。
  3. 其实记住一点,dp最终都要化为像素数量来衡量大小的,因为只有像素数量最直观。

sp(Scale-independent Pixels)

sp代表“比例像素”,它类似于dp,但是会根据用户的字体大小首选项进行缩放。使用sp可以确保文本大小在不同设备和不同用户设置下保持一致的可读性。

与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

要想判别手机屏幕的显示好坏,还要考虑屏幕的宽高(英寸),也就是用dpi即每英寸多少像素来评价屏幕的显示效果。(不然假如手机分辨率是1920×1080,但是屏幕是几十寸的,那显示效果将不会很好,甚至你有可能看到小的像素块,那将更影响视觉效果。)

--------------------------------------------------------------------------------------------------------------------------------

安卓的dp/dip、sp 虚拟尺寸单位 ,不受ppi的影响

  

  

  

Android 基本布局

  基准间距原则:

   

  水平外边距:

  

安卓文字排版标准

  

  

--------------------------------------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/wuhaoquan/p/9104603.html

单位之间的转换

  • 1dp = (dpi / 160) * 1px
  • 1pt ≈ 1/72 * 2.54cm = 1dp(在Android中,1pt大约等于1dp)

实际应用

在设计UI时,推荐使用dp作为主要的长度单位,因为它能够保证布局在不同密度的屏幕上保持一致。对于文本,使用sp来确保文本大小适应用户的字体偏好。

dp和sp是跨设备设计的首选单位,而px和pt则更适合特定情况下使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/379852.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PlantUML-UML 绘图工具安装、Graphviz安装、本地使用/在线使用、语法、图示案例

文章目录 前言本地安装vscode安装插件下载安装Graphviz配置Graphviz环境变量测试 在线使用演示PlantUML语法总结活动图(新语法)时序图类图用例图其他图 更多相关内容可查看 前言 本篇提供两种使用方式分别为 在线使用地址1:https://www.pla…

【日常记录】【插件】excel.js导出的时候给单元格设置下拉选择、数据校验等

文章目录 1. 代码基本结构2. 导出的excel 某单元格的值设置为下拉选择3. 如何把下拉选择项设置为动态4. 单元格设置校验、提示5. 在WPS上的设置 1. 代码基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…

Gitee使用教程2-克隆仓库(下载项目)并推送更新项目

一、下载 Gitee 仓库 1、点击克隆-复制代码 2、打开Git Bash 并输入复制的代码 下载好后&#xff0c;找不到文件在哪的可以输入 pwd 找到仓库路径 二、推送更新 Gitee 项目 1、打开 Git Bash 用 cd 命令进入你的仓库&#xff08;我的仓库名为book&#xff09; 2、添加文件到 …

容器化部署prometheus后再监控docker容器

一、主机部署Prometheus、cadvisor、grafana、node-exporter 1、部署cadvisor收集节点容器信息 docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detachtrue --namecadvisor google/cadvisor 2、…

在线 PDF 制作者泄露用户上传的文档

两家在线 PDF 制作者泄露了数万份用户文档&#xff0c;包括护照、驾驶执照、证书以及用户上传的其他个人信息。 我们都经历过这样的情况&#xff1a;非常匆忙&#xff0c;努力快速制作 PDF 并提交表单。许多人向在线 PDF 制作者寻求帮助&#xff0c;许多人的祈祷得到了回应。 …

PolarisMesh源码系列--Polaris-Go注册发现流程

导语 北极星是腾讯开源的一款服务治理平台&#xff0c;用来解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题。在分布式和微服务架构的治理领域&#xff0c;目前国内比较流行的还包括 Spring Cloud&#xff0c;Apache Dubbo 等。在 Kubernete…

golang开发环境搭建与踩坑记录

文章目录 一、安装下载1、go环境2、ide 二、基本使用1、运行2、结构体与方法函数指针3、闭包4、指针5、map6、接口7、异常 三、包管理1、go mod语法2、项目下载所有依赖 一、安装下载 1、go环境 下载地址&#xff1a;https://go.dev/dl/ 或者&#xff1a;https://golang.goog…

算法基础之回溯法

本文将详细介绍回溯法的基本原理和适用条件&#xff0c;并通过经典例题辅助读者理解回溯法的思想、掌握回溯法的使用。本文给出的例题包括&#xff1a;N皇后问题、子集和问题。 算法原理 在问题的解空间树中&#xff0c;回溯法按照深度优先的搜索策略&#xff0c;从根结点出发…

[开源]语雀+Vercel:打造免费个人博客网站

大家好,我是白露。 今天我想和大家分享我的今年的第一个开源项目 —— 基于语雀+Nextjs+Vercel实现免费的博客系统。 简单来说,你在语雀写博客,然后直接一键同步到个人网站上,网站自动部署! 而且,整个过程几乎不需要额外的成本,也不用充值语雀超级会员,hh。这个项目…

Teamviewer删除可信任设备

目前基本上主流的远程连接软件都有限制&#xff0c;要么收费&#xff1b; Teamviewer可信任设备有限&#xff0c;超出限制就会提示错误&#xff0c;需要删除多余的设备才能登陆账号&#xff01; 需要登陆这个网站 Teamviewer Management console&#xff0c;才能修改&#xff…

FastAPI -- 第三弹(自定义响应、中间件、代理、WebSockets)

路径操作的高级配置 OpenAPI 的 operationId from fastapi import FastAPIapp FastAPI()# 通过 operation_id 参数设置 app.get("/items/", operation_id"some_specific_id_you_define") async def read_items():return [{"item_id": "F…

【C语言】全面解析冒泡排序

文章目录 什么是冒泡排序&#xff1f;冒泡排序的基本实现代码解释冒泡排序的优化冒泡排序的性能分析冒泡排序的实际应用结论 在C语言编程中&#xff0c;排序算法是一个非常基础且重要的概念。冒泡排序作为最简单、最易理解的排序算法之一&#xff0c;广泛应用于各种编程教学和实…

vi 编辑器快捷生成 main 函数和基本框架

step1: 执行 sudo vi /etc/vim/vimrc &#xff08;修改vimrc需要管理员权限&#xff1a;sudo&#xff09; step2:输入用户密码&#xff0c;回车, 编辑vimrc文件 step3:在尾行输入以下代码&#xff08;可复制&#xff09; map mf i#include<stdio.h><ESC>o#includ…

.net dataexcel 脚本公式 函数源码

示例如: ScriptExec(""sum(1, 2, 3, 4)"") 结果等于10 using Feng.Excel.Builder; using Feng.Excel.Collections; using Feng.Excel.Interfaces; using Feng.Script.CBEexpress; using Feng.Script.Method; using System; using System.Collections.Gen…

Gitee 使用教程1-SSH 公钥设置

一、生成 SSH 公钥 1、打开终端&#xff08;Windows PowerShell 或 Git Bash&#xff09;&#xff0c;通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen -t ed25519 -C "Gitee SSH Key" 随后摁三次回车键&#xff08;Enter&#xff09; 2、查看生成的 SSH…

探索Puppeteer的强大功能:抓取隐藏内容

背景/引言 在现代网页设计中&#xff0c;动态内容和隐藏元素的使用越来越普遍&#xff0c;这些内容往往只有在特定的用户交互或条件下才会显示出来。为了有效地获取这些隐藏内容&#xff0c;传统的静态爬虫技术往往力不从心。Puppeteer&#xff0c;作为一个强大的无头浏览器工…

【Git】Git Submodules 介绍(通俗易懂,总结了工作完全够用的 submodule 命令)

Git Submodules 介绍 1、为什么你值得读这篇文章&#xff1f;2、为什么有 submodules&#xff1f;3、了解 Git Submodules3.1、如何让一个Git仓库变为另一个Git仓库的 submodule3.2、submodule 的父子关系存在哪里3.3、submodule 的父子关系信息怎么存 4、submodule 开发常用操…

昇思25天学习打卡营第30天 | MindNLP ChatGLM-6B StreamChat

今天是第30天&#xff0c;学习了MindNLP ChatGLM-6B StreamChat。 今天是参加打卡活动的最后一天&#xff0c;经过这些日子的测试&#xff0c;昇思MindSpore效果还是不错的。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;具有62亿参数&#xff0c;基于 …

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染&#xff01;今天和大家分享一下&#xff0c;人气推荐栏目的前端页面如何渲染内容。 经历过上一次的&#xff0c;新鲜好物的栏目渲染之后&#xff0c;我们已经熟练了&#xff0c;vue3的接口调用&#xff0c;数据渲染到页面中的整…

【Android安全】Ubuntu 下载、编译 、刷入Android-8.1.0_r1

0. 环境准备 Ubuntu 16.04 LTS&#xff08;预留至少95GB磁盘空间&#xff0c;实测占94.2GB&#xff09; Pixel 2 XL 要买欧版的&#xff0c;不要美版的。 欧版能解锁BootLoader、能刷机。 美版IMEI里一般带“v”或者"version"&#xff0c;这样不能解锁BootLoader、…