安卓屏幕概念及适配思路

屏幕适配专题笔记

背景

安卓面试基础面,偶尔会被问到屏幕适配的技巧,
结合自己所搜集的数据,进行一次梳理记录。

为什么要做屏幕适配

原因:适配得做好,下班回得早。
安卓系统的开源属性,各厂商都有不同的定制系统产品,屏幕尺寸相当多。
用专业术语来说,即安卓屏幕碎片化。

屏幕适配常用概念

尺寸、像素密度、分辨率概念

屏幕的物理属性。
Android Studio 新建模拟器,用pixel2举例。
在这里插入图片描述

  • 尺寸:对角线尺寸,单位inch,上图显示为5.0"1英寸 = 2.54cm

  • 分辨率:1080px * 1920px

  • 屏幕像素密度:每英寸的像素点数(dots per inch,即dpi
    计算公式为:√(W^2+H^2)/S,其中W和H是分辨率的宽高,S是屏幕尺寸。

dp dpi dip px概念

仅与软件相关

  • dpi:屏幕像素密度,不参与这一part的横向比较。

  • dp:即dip。全称Density Independent Pixels,简写为dp。

  • px:屏幕像素,如下图(来自百度)

  • dp与px基本关系:以160dip为基准,1dp = 1px
    在这里插入图片描述

ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi关系

类型分辨率屏幕密度区间换算dp->px比例
ldpi240x320[120,160)1dp=0.75px3
mdpi320x480[160,240)1dp=1px4
hdpi480x800[240,320)1dp=1.5px6
xhdpi720x1280[320,480)1dp=2px8
xxhdpi1080x1920[480,640)1dp=3px12
xxxhdpi1440x2560[640,next dpi)1dp=4px16

通用理解:在mdpi中使用width=100px , height=100px的图标,屏幕密度为320的设备中,图标显示为width=150px , height=150px,效果会显得模糊一些。

概念搞清楚了,如何运用

  • 场景1:提前跟UI沟通,让UI出图时,把其他倍图同步输出。也可以建好目录,让UI把图往里面放即可。
  • 场景2:做多屏开发时,非主屏的屏幕密度,在framework中是自动计算得到。如果懂得概念,可以手动修改,或者新增配置,达到你想要的效果。如:

..frameworks/base/services/core/java/com/android/server/display/DisplayDeviceInfo.java 

public void setAssumedDensityForExternalDisplay(int width, int height) {
		//默认计算dpi
        //densityDpi = Math.min(width, height) * DisplayMetrics.DENSITY_XHIGH / 1080;
        
        //手动修改dpi,建议使用配置
        densityDpi = 160;
        
        //...
}
  • 场景3:布局文件中,常规用dp作为控件的大小。但在某些特殊场景,如非移动端巨量的屏幕尺寸,px可能更加直观,不用考虑屏幕密度,也许会带来更高的效率。就比如我从事过白家电的一些项目,屏幕尺寸不多,一个项目做1年以上的那种,用px做起来相对直观一些。实在怕麻烦,可以用脚本批量替换。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值