Android屏幕适配小结

基本概念

  1. 屏幕尺寸
    屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米
  2. 屏幕分辨率
    屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。
  3. 屏幕像素密度
    屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
  4. dp、dip、dpi、sp、px、pt
    dp和dip是一样的,都是Density Independent Pixels的缩写,即密度无关像素。在Android中,规定以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px。类似sp和pt是一样的,

Android读取资源文件

Android SDK会自动屏幕尺寸选择对应的资源文件进行渲染,一般资源文件存在**/res/ 目录中,如果各个资源都有,系统会自动识别手机的屏幕密度,并调取相对应的资源文件夹里的资源文件。比如手机是HDPI的,而HDPI资源文件里有,就调取HDPI的资源。如果相对应资源文件没有,会调取接近的大资源并按比例缩小来适配(缩小损失微小,只是边缘会产生模糊像素,用户没有设计师的像素眼,影响并不大)。如果大资源也没有,会调取接近的小资源并按比例放大来适配。(放大损失大,模糊,和图片放大一个道理)。

系统加载图片前先将图片进行缩放,因此你通过getwidth得到的尺寸已经是经过缩放的尺寸了。

理论上来说只需要提供一种规格的图片资源就ok了,如果只提供ldpi规格的图片,对于大分辨率的手机如果把图片放大就会不清晰,所以需要提供一套你需要支持的最大dpi的图片,这样即使用户的手机分辨率很小,这样图片缩小依然很清晰。目前市面上最普遍的高端机的分辨率还多集中在720X1080范围,也就是多集中在xhdpi,所以目前来看xhpdi规格的图片成为了首选。

代码规范

  1. 使用wrap_content、math_parent、weight
    layout_weight:所占宽度=原来宽度+剩余空间所占百分比的宽度
  2. 使用线性布局,相对布局,禁用绝对布局
  3. 使用限定符,如尺寸限定符,最小宽度限定符,屏幕方向限定符
    res/layout-large/main.xml、res/layout-sw600dp/main.xml、res/values-sw600dp-land/layouts.xml
  4. 使用.9图
    当我们需要使图片在拉伸后还能保持一定的显示效果,比如,不能使图片中的重要像素拉伸,不能使内容区域受到拉伸的影响,我们就可以使用.9.png图来实现。

注: 如果切图放错文件夹会有什么问题?

Android会自动为其他规格的dpi屏幕适配,比如你在xhdpi放了一张120X120px大小的图片,那么在在hdpi屏幕上显示的就只有120/2*1.5=90px大小,但是如果你不小心同样把这张图片也放入了mdpi了,这个时候用wrap_content显示就会有问题。

比如假设你只在drawable_xhdpi文件夹下放了test图片,xhdpi的设备会去xhdpi文件夹下找到test图片并直接显示,而mdpi的设备优先会去mdpi文件夹里查找test图片,但是没找到,最后在xhdpi文件夹下找到,然后会自动根据density计算并缩放显示出来,实际显示出来的大小是120/2=60px, 所以整体的显示比例才会看起来比较正常。但是如果你在mdpi文件夹里也放入了同样的图片,那么mdpi的设备会直接去mdpi文件夹里寻找到test图片,并直接显示,而这时候显示不会缩放,实际显示大小就是120X120,在mdpi的屏幕上看起来就会比较大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值