码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android 屏幕适配


    Android 屏幕适配 Android屏幕尺寸的碎片化很严重,各种分辨率尺寸的设备层出不穷。

    目录
    • 一、目的
    • 二、环境
    • 三、相关概念
      • 3.1 屏幕尺寸(screen size)
      • 3.2 屏幕分辨率(Resolution)
      • 3.3 像素(pixel)
      • 3.4 ppi
      • 3.5 dpi
      • 3.6 dp/dip
      • 3.7 sp
    • 四、Q&A
      • 4.1 为啥dpi = 160?
      • 4.2 为啥Android要引入dp概念?
    • 五、代码仓库地址
    • 六、参考资料

    一、目的

            最近在调试一款设备,发现视图的样式尺寸偏大,像老人机。那时候也清楚是屏幕适配问题,但是脑子也仅想着通过修改分辨率的大小尝试修复该问题,没有想到其他手段调试。
            该问题也是一个Android开发者需应具备的基本知识点,这驱使我去了解Android屏幕相关的概念,及弄清楚该问题的原因。

    二、环境

    1. 平台:UIS7870SC
    2. 版本:Android 13

    三、相关概念

    3.1 屏幕尺寸(screen size)

            屏幕大小是手机对角线的物理尺寸,单位是:英寸(inch),1 inch =2.54 cm(厘米)

    3.2 屏幕分辨率(Resolution)

            分辨率就是是指屏幕上垂直方向和水平方向上的像素个数,一般描述为:横像素 * 纵像素,如 720 * 1280,就是在纵方向上有1280个像素点,在横方向上有720个像素点。
            日常所说的分辨率有两个概念,一个指显示器的分辨率,另一个指图像的分辨率。显示器分辨率指显示器所能显示的像素多少(720px*1280px),显示器可显示的像素越多,画面就越精细。图像分辨率则是单位英寸中所包含的像素点数,比如photoshop 里新建画布时设置的图像分辨率72ppi,其定义更趋近于分辨率本身的定义。

    3.3 像素(pixel)

            Pixels 我们看到屏幕上的图像由一个个像素组成,像素里包含色彩信息。如常说的手机分辨率:1080 x 1920 指的是手机宽度可展示1080像素,高度可展示1920像素。

    3.4 ppi

            ppi(Pixels Per Inch)即像素密度,指每英寸包含的物理像素的数量。ppi 是设备在物理上的属性值,取决于屏幕自身。设备的宽高都属于客观不可改变的值,所以 ppi 也是无法修改的,是硬件上一个客观存在无法改变的值。其计算公式如下:

    ppi=√(宽2+高2)(单位px)屏幕尺寸(单位inch)

    3.5 dpi

            dpi(Dots Per Inch)原先用于在印刷行业中描述每英寸包含有多少个点,在 Android 开发中则用来描述屏幕像素密度。屏幕像素密度决定了在软件概念上单位距离对应的像素总数,是手机在出厂时就会被写入系统配置文件中的一个属性值,一般情况下用户是无法修改该值的,但在开发者模式中有修改该值的入口,是软件上一个可以修改的值。
            个人理解:dpi(dots per inch)、ppi(pixels per inch),前者突出图像的打印像数密度,后者突出设备的像数密度。

    3.6 dp/dip

            density-independent pixels,dip是缩写,也可以更简单些称作dp。该单位的目的是屏蔽不同设备密度差异。
            根据不同的屏幕分辨率,与px有不同的倍数关系。规定:1dp等于屏幕像素密度为160ppi时1px的长度,因此dp在整个系统大小是固定的。公式:1dp=(屏幕ppi/ 160)px。为简便起见,Android 将所有屏幕密度分组为六种通用密度,具体如下表:

    类别 dpi density
    (屏幕ppi/ 160)
    ldpi(低) 120dpi 0.75
    mdpi(中) 160dpi 1.0
    hdpi(高) 240dpi 1.5
    xhdpi(超高) 320dpi 2.0
    xxhdpi(超超高) 480dpi 3.0
    xxxhdpi(超超超高) 640dpi 4.0

    3.7 sp

            sp(Scaled Pixels):通常用于指定字体的大小,当用户修改手机显示的字体时,字体大小会随之改变。

    四、Q&A

    4.1 为啥dpi = 160?

    (1)这个在Google的官方文档中有给出了解释,因为第一款Android设备(HTC的T-Mobile G1)是属于160dpi的。
    (2)如果以 160 dpi作为基准的话,只要尺寸的 DP是4的公倍数,XHDPI下乘以2,HDPI下乘以 1.5,LDPI下乘以 0.75 即可满足所有尺寸下都是整数 pixel,而其他的dpi不配。

    4.2 为啥Android要引入dp概念?

            Android屏幕尺寸的碎片化很严重,各种分辨率尺寸的设备层出不穷。如果以px作为单位,会出现如下现象:
    (1)不同分辨率的设备,对应的px的长度不一致;
    图二设备:分辨率1280x720,dpi=240,即屏幕的宽为720/1.5=480dp;
    图一设备:分辨率1920x1080,dpi=360,即屏幕的宽为1080/2.25=480dp;

    五、代码仓库地址

    Demo地址:  https://gitee.com/linzhiqin/custom-demo

    六、参考资料

    https://blog.51cto.com/u_9420214/6336492
    https://blog.csdn.net/qq_39312146/article/details/129271291
    https://blog.51cto.com/u_16213653/7742791

    https://j.eastday.com/p/161600562077011931

  • 相关阅读:
    电脑入门:路由器测试技术介绍及类型和方法
    VBA技术资料MF64:遍历单元格搜索字符并高亮显示
    探索MacOS:苹果电脑的操作系统的魅力
    C# datagridView 控件使用心得
    【HMS Core】【FAQ】运动健康、音频编辑、华为帐号服务 典型问题合集7
    含文档+PPT+源码等]精品微信小程序springboot服装企业人事管理系统+后台管理系统[包运行成功]Java毕业设计SSM项目源码
    生成式人工智能在先进无人机网络中的应用
    【数智化人物展】同方有云联合创始人兼总经理江琦:云计算,引领数智化升级的动能...
    计算机毕业设计 基于SSM的民宿推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
    buildroot制作的嵌入式Linux根文件系统启动后不是root用户,提示没有权限
  • 原文地址:https://www.cnblogs.com/zhiqinlin/p/18252863
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号