屏幕适配:
1.为什么要进行屏幕适配?
因为android手机碎片化和版本的不一致,所以android应用开发就需要做屏幕适配。
2.对于那些屏幕分辨率进行适配?
需要做适配的手机的分辨率分别:1280*720 1920*1080 800*480 854*480 960*540 1184*720
3.什么是屏幕尺寸,屏幕分辨率,屏幕像素密度
屏幕尺寸:指屏幕对角线的长度,单位是英寸 1英寸=2.54厘米。
屏幕分辨率:指的是手机横纵方向上的像素点数。分辨率越高,显示效果越好。单位是px 1px==1像素点
屏幕像素密度:指每英寸上的屏幕像素点数,单位是dpi 是dot per inch 的缩写。
和屏幕尺寸和屏幕分辨率相关,每英寸的像素点越多,密度就越大,显示效果就越好。
计算屏幕像素密度的方式:
以Smartisan T2为例:
屏幕尺寸:4.95英寸 分辨率:1920*1080
屏幕像素密度=1920*1920+1080*1080开平方/4.95 = 445dpi
4.什么是dp,dip,dpi,sp,px?它们之间有什么关系?
px :构成图像的最小单位,
dp和dip:概念是完全相同的,密度无关像素 ,以160dpi为基准,1dip = 1px。
如果按照dp作为单位,在不同的分辨率下,dp和px换算的标准是不一样的。
在高分辨率的手机上,使用dp作为单位,就能够保证实现相同的效果。
sp : 根据文字大小进行放缩,一般使用sp作为衡量文字的单位。
google官方建议文字大小不要小于12sp,文字大小的数量不要用奇数,要使用偶数,也不要小数,
使用奇数和小数会在放缩时造成精度的缺失。
5.什么是mdpi,ldpi,hdpi,xhdpi,xxhdpi?如何计算和区分的?
对于不同手机的像素密度进行区分的,在不同的像素密度上,同一张图片的显示效果其实是不一样的,
但是我们要不同的屏幕密度上显示出相同的效果,那么就要对res文件夹当中的子文件夹进行区分,
可以通过在文件夹后面添加限定符,就可以实现在不同分辨率下的相同效果。
名称 取值范围
mdpi 120dpi~160dpi 48*48
hdpi 160dpi~240dpi 72*72
xhdpi 240dpi~320dpi 96*96
xxhdpi 320dpi~480dpi 144*144
xxxhdpi 480dpi~640dpi
6.解决屏幕适配的问题
1.怎么能让应用支持各种屏幕?
a)使用wrap_content,match_parent,weight属性值去定义控件的宽和高。
weight 权重
计算出的宽度=原来的宽度+剩余空间所占百分比的宽度
以button为例:
假设屏幕宽度为L,然后横向放置两个button,要求比例是1:2.
button1----》width--match_parent: L+(L-2L)/3 = L-1/3L = 2/3L;
0dp :0+(l-0)/3 = 1/3L;
button2----> width--match_parent:L+(L-2L)*2/3=L-2/3L=1/3L;
0dp :0+(l-0)*2/3 =2/3L;
b)使用相对布局等,禁用绝对布局。
绝对布局适配性很差,以左上点为左边原点,要具体给定放置控件的值才能绘制绘制。
想要为不同的屏幕尺寸设定不同的高度,就要使用相对布局或者线性布局。
c)使用限定符
布局限定符:
layout 普通的单面版的屏幕
layout-large 屏幕尺寸大于7英寸,同时系统版本在3.2之下
layout-sw600dp 屏幕像素密度在600dpi之上,系统版本在3.2之上的。
使用限定符,使平板和手机实现适配。
d)使用布局别名
可以在layout文件夹中定义不同的布局,然后在values的文件夹当中定义layout.xml文件,
然后引用layout文件夹当中的布局,并且给他们统一的名字,然后针对不同的屏幕尺寸就具备
不同的布局引用了。
e)使用屏幕方向限定符
布局设置限定符
layout-land 横屏
layout(layout-port) 竖屏
layout-sw600dp-land
layout-sw600dp-port
f) 使用自动拉伸的位图
自动拉伸的位图----》点9图片
左边和上边是负责拉伸区域,可以指定需要拉伸的部分。
右边和下边是负责间隔区域,可以指定放置内容的位置。