Android手机屏幕适配知识整理

来源:互联网 发布:spring mybatis打印sql 编辑:程序博客网 时间:2024/06/05 15:24

目录

  • 关于单位
  • 关于屏幕密度
  • 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中找,直到找到为止。

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

0 0
原创粉丝点击