Android屏幕适配问题

不知道小组长想什么,突然让我写个屏幕适配。


所以在这里记录一遍。

移动端屏幕适配
尺寸与屏幕分辨率
屏幕尺寸
含义:手机对角线的物理尺寸
单位:英寸(inch),1英寸=2.54cm
Android手机常见的尺寸有5寸、5.5寸、6寸等等

屏幕分辨率
含义:手机在横向、纵向上的像素点数总和
一般描述成屏幕的"宽x高”=AxB
含义:屏幕在横向方向(宽度)上有A个像素点,在纵向方向(高)有B个像素点
例子:1080x1920,即宽度方向上有1080个像素点,在高度方向上有1920个像素点
单位:px(pixel),1px=1像素点
UI设计师的设计图会以px作为统一的计量单位
Android手机常见的分辨率:320x480、480x800、720x1280、1080x1920

屏幕像素密度
含义:每英寸的像素点数单位:dpi(dots per ich)假设设备内每英寸有160个像素,那么该设备的屏幕像素密度=160dpi安卓手机对于每类手机屏幕大小都有一个相应的屏幕像素密度:
 


屏幕尺寸、分辨率、像素密度三者关系

 

重申像素密度

      
密度无关像素

含义:density-independent pixel,叫dpdip,与终端上的实际物理像素点无关。

单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果

Android开发时用dp而不是px单位设置图片大小,是Android特有的单位

场景:假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位,那么在480x800分辨率手机上设置应为240px;在320x480的手机上应设置为160px,二者设置就不同了;如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。


IOS屏幕适配
IOS在适配方面在尺寸与屏幕分辨率与上述提到的与Android方面概念相同,类似Android的像素密度dp的概念叫像素密度PPI。
像素密度PPI
PPI(Pixel Per Inch by diagonal):表示沿着对角线,每英寸所拥有的像素(Pixel)数目。
PPI数值越高,代表显示屏能够以越高的密度显示图像,即通常所说的分辨率越高、颗粒感越弱。


回顾与提到几个重要的单位
px:pixel,像素,电子屏幕上组成一幅图画或照片的最基本单元
dp: dip,Density-independent pixel, 是安卓开发用的长度单位,1dp表示在屏幕像素点密度为160ppi时1px长度
pt: point,点,印刷行业常用单位,等于1/72英寸
ppi: pixel per inch,每英寸像素数,该值越高,则屏幕越细腻
dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻

pt和px 与ppi和dpi的转换
pt和px
公式一: 1pt= (DPI / 72) px
当photoshop中新建画布的分辨率为72ppi( 即 72dpi时 ), 1pt=1px; 当新建画布分辨率为72*2=144ppi时,1pt=2px

ppi和dpi
dpi最初用于衡量打印物上每英寸的点数密度。DPI值越小图片越不精细。当DPI的概念用在计算机屏幕上时,就应称之为ppi。同理: PPI就是计算机屏幕上每英寸可以显示的像素点的数量。因此,在电子屏幕显示中提到的ppi和dpi是一样的,可认为
公式二:dpi=ppi

PPI计算与屏幕尺寸与像素展示
 

dp、sp、px的区别展示
 

dp、sp、px的区别展示
在字体方面关于dp和sp与px的区别显而易见,其中dp与sp类似,但sp可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。
也就是说使用sp后,字体的大小会随着系统设置字体大小而跟随着进行文字放缩。详细的可以将程序的字体调整后,可看出差别。
所以根据以上描述,可以在布局控件上进行屏幕适配。

支持各种屏幕尺寸
使用wrap_content、match_parent、weight
要确保布局的灵活性并适应各种尺寸的屏幕,应使用 “wrap_content” 和 “match_parent” 控制某些视图组件的宽度和高度。
使用 “wrap_content”,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 “match_parent”(在低于 API 级别 8 的级别中称为 “fill_parent”)则会展开组件以匹配其父视图的尺寸。
如果使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬编码的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间。此方法可让布局正确适应各种屏幕尺寸和屏幕方向。

weight
weight是线性布局的一个独特的属性,我们可以使用这个属性来按照比例对界面进行分配,完成一些特殊的需求。
android:layout_weight的真实含义是:如果View设置了该属性并且有效,那么该 View的宽度等于原有宽度(android:layout_width)加上剩余空间的占比。
我们在布局里面设置为线性布局,横向排列,然后放置两个宽度为0dp的文本视图,分别设置weight为1和1,在效果图中,我们可以看到两个按钮按照1:1的宽度比例正常排列了,这也是我们经常使用到的场景,这是时候很好理解,TextView的宽度就是1/(1+1) = 1/2, 另一个TextView的宽度则是1/(1+1) = 1/2,我们可以很清楚的明白这种情景下的占比如何计算。
假如我们的宽度不是0dp(wrap_content和0dp的效果相同),则是match_parent,占比则和上面正好相反。
示例:

 
百分比适配方法
以某一分辨率为基准,生成所有分辨率对应像素数列表
现在我们以320x480的分辨率为基准:
将屏幕的宽度分为320份,取值为x1~x320
将屏幕的高度分为480份,取值为y1~y480
然后生成该分辨率对应像素数的列表。

320x480的分辨率为基准
 

找到基准后,是时候把其他分辨率补全了,现今以写1080x1920的分辨率为例:
因为基准是320x480,所以1080/320=3.375px,1920/480=4px,所以相应文件应该是

之后用上面的方法一一把你需要适配的分辨率的像素列表补全即可。

诸如此类后续的重复性操作,网上有诸多工具类,大家可以自行查找。


图片资源匹配
步骤1:根据以下尺寸范围针对各密度生成相应的图片。
比如说,如果我们为 xhdpi 设备生成了 200x200 px尺寸的图片,就应该按照相应比例地为 hdpi、mdpi 和 ldpi 设备分别生成 150x150、100x100 和 75x75 尺寸的图片
即一套分辨率=一套位图资源(这个当然是Ui设计师做了)
步骤2:将生成的图片文件放在 res/ 下的相应子目录中(mdpi、hdpi、xhdpi、xxhdpi),系统就会根据运行您应用的设备的屏幕密度自动选择合适的图片
步骤3:通过引用 @drawable/id,系统都能根据相应屏幕的 屏幕密度(dpi)自动选取合适的位图。
注:
如果是.9图或者是不需要多个分辨率的图片,放在drawable文件夹即可
对应分辨率的图片要正确的放在合适的文件夹,否则会造成图片拉伸等问题。​

结束语
主要提到了关于px、pt、ppi、dpi、dp之间的关系,与Android与IOS屏幕适配需要注意的参数关系与参数是什么的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值