屏幕适配的几种方式

Andorid是开源的,开源的好处是“百家争鸣,百花齐放”,更快的打入并占有市场,弊端呢?衍生出许许多多手机厂商,各厂商生产的手机百十种机型不算多吧,往往国人有一种习惯,就是喜欢和别人的不一样,遵循:“别人无,我有;别人有,我好;别人好,我优”的心态。

往往不按照规范走,随意修改API,这都是常态;想做自己独特的东西,API任意修改,做我自己的定制,产品独特……往往只管赚钱,钱是首要的,记不清是谁说过的话,“先生产,后环保”;几十年过去了,国家、国人为了环保付出了多少努力?难道还不能反思一下自己吗?代价还不够沉重吗?

言归正传,我等千千万猴子的现状是什么?做一个功能,这个机型很好,换一种机型就成了狗屎……屏幕适配千千万,到底什么才是最好的呢?答案是:没有最好的,只有最适合自己的;遇到问题不要想着如何回避,避免的实现思路短期可以,但是往往再次碰到的时候要怎么做?也许到了不得不来面对、不得不做的时候后悔莫及吗?什么事情都心理安慰自己,以后有时间再回过头来做吧,我一定记住,随着时间积累,需要做的事情越积累越多,压得自己透不过气来,到那时候已经为时已晚了;

进入正题:什么是屏幕适配?

讲解屏幕适配之前先要了解什么是dp、sp、px的概念;

dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA

如果设置表示长度、高度等属性时可以使用dp  或sp。但如果设置字体,需要使用sp。

dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一 样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 /160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。

px: pixels(像素).  不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。 

pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;

sp: scaled pixels(放大像素).  主要用于字体显示best for textsize。

当然了,dip虽然可以在某种程度上帮助我们去更好的适应不同密度的屏幕,但他也并不是万能的;

一个尺寸标注为N dp的物体,它在不同屏幕上的实际物理尺寸(单位inch)为多少呢?

计算公式如下:

physical_size=N*(dpi/160)*(1/dpi)=N/160

dpi代表了这个屏幕的密度,我们得到一个结论:

用dp标注的物品,他在不同屏幕上的实际物理尺寸理论上将保持不变;

只有dp就足够了吗?NO,NO,NO,

布局适配

布局要如何适配呢?大概可以通过以下几种思路来实现

应杜绝使用绝对布局,使用绝对布局硬编的后果是,这一款或几款手机差不多可以,换其他手机来测试,会发现,这是我写的吗?什么鬼?Google提供的相对布局不可说不好,支持拖拽,画界面快,开发效率高,一脱成名,但是后期修改,维护成本有点高,原因不再累赘,所以这里也不再做相关介绍;

1.初期参考使用权重来动态比例展示,LinearLayout的weight属性来进行权重设置,进而达到按比例显示布局的意图:

屏幕适配的几种方式_第1张图片

不再相互规定,让各个view自己去做处理,在不同的屏幕上相互间距都是一样的(最起码看上去,哈),

需要注意一点:weight是float类型

2.view背景(button、textview等)尽可能少使用图片来做操作,多实用shape和seleter控制,效率高,错误率低,好控制;

3.分块控制,杜绝所有的东西一笼统的在一个布局文件里面,找的困难,错误率大大提升,所以建议使用标签来控制???,了解一下

图片资源适配

往往项目里面需要使用大量图片,来显得华丽一点,给人眼前一亮的感觉,资源图片Google也做了适配,不同的分辨率会先去加载最适应自己分辨率的资源,如果没有就去找最邻近的资源图片,直到找到为止;所以一些需要做适配的图片资源应该让UI出5套(hdpi、mdpi、xhdpi、xxhdpi、xxxhdpi),一些icon看情况来做适配,影响甚微;

 

你可能感兴趣的:(橘子---圆又圆)