目录

  • 关于单位
  • 关于屏幕密度
  • res包下的包命名

关于单位

概念:

  • 【px】pixels,像素
  • 【sp】scaled pixels,缩放像素
  • 【dp/dip】device independent pixels,设备独立像素
  • 【dpi】dots per inch,每英寸所打印的点数(不晓得它的专业名称,所以暂时称它为“密度”)
  • 【ppi】pixels per inch,像素密度

知识点:

  • 480*800、720*1280、1080*1920等屏幕分辨率的单位是像素,即px
  • 手机的屏幕参数中有一项屏幕像素密度,单位是ppi,比如445ppi
  • 在Android设备中,dpi等价于ppi,常用dpi来表示屏幕密度。dpi和ppi的区别可参考PPI vs. DPI: what’s the difference?
  • 在布局中一般使用sp表示文字大小,比如android:textSize=”16sp”
  • 在布局中一般使用dp/dip作为文字大小以外的数字单位,比如android:layout_width=”120dp”,android:layout_marginTop=”10dp”
  • 手机的屏幕参数中有一项屏幕尺寸,单位是英寸,比如5英寸,是指屏幕对角线的长度

换算:

  • 屏幕分辨率为1080*1920,尺寸为5英寸的手机,其宽为1080px,高为1920px,根据勾股定理对角线为2203px,像素密度为2203px/5英寸=440ppi,也就是440dpi
  • px=dp*(dpi/160),px和dp之间的换算公式,这里px、dp、dpi都代表数值,不考虑单位

关于密度

目前在Android中,根据dpi,屏幕分为ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi这么6种。

  • ldpi,至少达到120dpi,分辨率一般为240*320
  • mdpi,至少达到160dpi,分辨率一般为320*480
  • hdpi,至少达到240dpi,分辨率一般为480*800
  • xhdpi,至少达到320dpi,分辨率一般为720*1280
  • xxhdpi,至少达到480dpi,分辨率一般为1080*1920
  • xxxdpi,至少达到640dpi,分辨率一般为1440*2560

在密度为160dpi的屏幕中,1dp=1px,因此mdpi为基准屏幕。6种屏幕密度比例为3:4:6:8:12:16,即

  • 在ldpi的屏幕中,1dp=0.75px,比如icon为36*36
  • 在mdpi的屏幕中,1dp=1px,比如icon为48*48
  • 在hdpi的屏幕中,1dp=1.5px,比如icon为72*72
  • 在xhdpi的屏幕中,1dp=2px,比如icon为96*96
  • 在xxhdpi的屏幕中,1dp=3px,比如icon为144*144
  • 在xxxhdpi的屏幕中,1dp=4px,比如icon为192*192

由以上的数据可以很容易得出

  • 320*480的屏幕宽度为320dp
  • 480*800的屏幕宽度为320dp
  • 720*1280的屏幕宽度为360dp
  • 1080*1920的屏幕宽度为360dp
  • 1440*2560的屏幕宽度为360dp

由此可见,只是在布局中使用dp还无法很好地自适应屏幕,需要考虑屏幕高度和宽度。但是相对于以px为单位的320*480、480*800等屏幕分辨率来说,以dp为单位能大大减少屏幕差异。


res包下的包命名

drawable,放置图片资源。

  • drawable,xml配置文件和对分辨率要求较低的图片资源
  • drawable-ldpi,密度为ldpi的屏幕使用的图片资源
  • drawable-mdpi,密度为mdpi的屏幕使用的图片资源
  • drawable-hdpi,密度为hdpi的屏幕使用的图片资源
  • drawable-xhdpi,密度为xhdpi的屏幕使用的图片资源
  • drawable-xxhdpi,密度为xxhdpi的屏幕使用的图片资源
  • drawable-xxxhdpi,密度为xxxhdpi的屏幕使用的图片资源
  • drawable-nodpi,按照实际像素大小进行显示,不会被缩放

layout,放置布局文件。layout包可以根据屏幕分辨率自定义,格式为“layout-高度x宽度”,比如分辨率为480*800的手机会优先使用layout-800x480包下的布局文件

  • layout,通用
  • layout-854x480,屏幕为480*854
  • layout-1280x768,屏幕为768*1280
  • layout-small,屏幕至少为320*426
  • layout-normal,屏幕至少为320*470
  • layout-large,屏幕至少为480*640
  • layout-xlarge,屏幕至少为720*960
  • layout-land,横屏
  • layout-port,竖屏
  • layout-land-854x480,屏幕为480*854,且为横屏
  • layout-large-land,屏幕至少为480*640,且为横屏

注意事项:
在android3.0后,需将高度减去48像素,即底部状态栏的高度,比如分辨率为480*854对应layout-806x480。分辨率中大的数字必须写到前面。

values,放置strings.xml、dimens.xml、styles.xml、colors.xml等资源文件。

  • values-v11,API 11以上
  • values-v14,API 14以上
  • values-v21,API 21以上
  • values-sw600dp,高度和宽度都大于600dp
  • values-w800dp,宽度大于800dp
  • values-h820dp,高度大于820dp
  • values-sw480dp-land,高度和宽度都大于480dp,且为横屏

当在对应包中找不到需要的资源文件,会自动从合适的其他包中去找,比如在drawable-xhdpi包中找不到需要的图片时,会去drawable-xxhdpi中找,如果也没有,再到drawable-xxxhdpi中找,如果还没有,再到drawable-hdpi中找,直到找到为止。

暂时找到了这些知识点,后续有新的发现再做更新。

Android手机屏幕适配知识整理相关推荐

  1. Android开发——Android手机屏幕适配方案总结

    0. 前言 Android的屏幕适配,即使得某一元素在Android不同尺寸.不同分辨率的手机上具备相同的显示效果,这个问题一直以来都是我们Android开发者不得不面对的问题.本文参考了很多前人的博 ...

  2. android手机屏幕适配理论知识

    对于具有相同像素密度的设备来说,像素越高,尺寸就越大,所以可以换个思路,讲问题从单纯的尺寸大小转换到像素大小和像素密度的角度来 占比最高的是480*800,320*480的设备竟然也占据了很大比例,但 ...

  3. Android手机屏幕适配

    Android机型尺寸各种各样,于是屏幕适配就成了Android开发中很重要的一环.Android屏幕适配可能一些开发者都会遇到这样的问题,今天就来分享下屏幕适配,其实Android屏幕适配也可以很简 ...

  4. mdpi的手机_【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi

    Android的碎片化设备状况,使得其API必须在不同的屏幕中选取合适的算法并展示,而在API级别上,的确也是有类似的定义,当然,我也终于明白,这是Android的显示效果始终跟不上苹果的原因 苹果的 ...

  5. 【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi

    为什么80%的码农都做不了架构师?>>>    Android的碎片化设备状况,使得其API必须在不同的屏幕中选取合适的算法并展示,而在API级别上,的确也是有类似的定义,当然,我也 ...

  6. Android多屏幕适配-手机

    1.常用单位及其关系 px:像素 inch:英寸 pt:1/72 英寸 dpi:一英寸长的直线上的像素点的数量,即像素密度.不同的设备,dpi值不同,显示效果不同,dpi的值跟设备硬件有关.标准值是1 ...

  7. Android的屏幕适配

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  8. android – 多屏幕适配相关

    android – 多屏幕适配相关 作者: 曲天日期: 2011/10/27 1.基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).a ...

  9. android多屏幕适配注意几点

    一.关于布局适配 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如 ...

最新文章

  1. ENBM内部测试试题 组建与维护企业网络试题
  2. Redis源码剖析(十一)跳表
  3. Java并发教程–锁定:显式锁定
  4. 2020非全日计算机博士,在职攻读博士是不是非常难,免考在职博士和非全日博士有什么不同...
  5. C++ 对引用的理解4
  6. 苹果无线耳机使用方法_苹果官方:如果 AirPods Pro 出现这些问题,我们将免费更换!...
  7. Redis-集群监控之Redis monitor
  8. structs2拦截器详解
  9. Redis简介与安装
  10. alt php,我怎样才能在PHP中获取a p标签的alt属性?
  11. Ibator生成iBATIS配置文件 DO及DAO操作记录
  12. 美国政府悬赏1000万美元,获取 DarkSide 勒索团伙线索
  13. CentOS 7 下挂载新硬盘
  14. 最新EyouCMS发布工具
  15. Windows重装为Linux
  16. 两张MD5值一样但实际不一样的图片
  17. STK开发包用法探讨
  18. 批处理命令和常用脚本
  19. 中国信号发生器行业市场供需与战略研究报告
  20. 负载均衡获得真实源IP的6种方法

热门文章

  1. Antd Upload 文件上传,自定义上传错误信息
  2. java 文字生成图片
  3. 漏洞复现-渗透原理与挖掘ThinkPHP系列
  4. 好用的PPT模板、图片、字体素材、图标素材、配色方案网站
  5. 梯度下降算法原理讲解——机器学习
  6. 浅谈spring的生命周期
  7. sql语句的优化方式
  8. 解决由于驱动错误导致笔记本外接显示器无信号输入,解析错误、黑屏,闪屏,花屏的问题。常见于重装系统之后
  9. 华为手机还有这么好用的翻译功能!说话就能语音翻译,高效又便捷
  10. 设置VMWARE通过桥接方式使用主机无线网卡上网及Linux网络配置