各位老司机可能都明白一个道理:眼见不一定为实,耳听也非为虚。所以,在Android开发过程中肯定会遇到各种屏幕大小不统一测试情况下的字体大小不一,控件像喝醉了酒的醉汉一样东倒西歪的,那么,屏幕适配到底有多难,下面这趟车开往幼儿园,请各位老司机抓好扶手,随时准备动手。
首先我们要明白几个单位:dpi、dp、px,闲话不多扯,我只说重要的概念问题。
dpi:图像每英寸面积内的像素点数;
dp:像素密度
px:像素
关于他们之间的转换有这样一个公式:
设屏幕尺寸横为x,竖为y,屏幕尺寸为m那么
dpi = √x^2 + y^2 / m,
dp = dpi / 160 单位 px。
先上两张图给大家一个开胃菜(图片有点大了,不好意思,占了很大的空间):
现在,有一个问题要问各位:
不过要再次强调,眼睛只是给你反馈所见信息的一个窗口。
问:有两台设备A和B,A是720px*1280px,4.65寸的,B是1080px*1920px,4.65寸的,现有一个200dp的控件摆放到以上两台设备上,请问哪一个比较大。那如果摆放的是200px的控件呢?
现在我们来计算一下,两台设备的dp各是多少;
A:dp = 1.973931155988;
B:dp = 2.960896733982;
那么200dp的控件在各个屏幕上占多少px呢;
A:≈394 px
B:≈592 px
那这个200dp的控件占用了屏幕像素的比例是多少呢(以横向为计算目标)?
A: 592 / 1080 ≈ 0.54
B : 394 / 720 ≈ 0.54
那么,比例都相同,是不是在不同分辨率,相等屏幕尺寸,相等dp下的控件看起来是不是一样大呢?
那么,若是放的是200px的控件呢?
答案很显然,不同分辨率,相等尺寸屏幕,相等px下的控件所占的比例偏小,所以肉眼看起来在1080px*1920px下的控件比较小。
那么接下来,在相同像素条件下,不同屏幕尺寸,相同大小的控件又是怎样的效果呢?
下面我就不一个一个的计算了,直接上答案吧:
两台设备A,B,A是720px*1280px,4.65寸;B是720px*1280px,5寸。
200dp的控件与200px的控件;
答案就是如此简单,望各位细细斟酌。
下面才是正文:屏幕适配
1.各个dpi下的资源文件都做一套,但是这个有个缺点,那就是apk就像吃了猪饲料一样胖的很快。
2.动态设置控件大小,在Android绘制界面之前通过获取屏幕像素和尺寸计算好dp与px的关系,再使用各种layoutparams对控件进行设置,但是这个是一个伟大的工程,每个布局中的每一个控件都要去进行计算。
3.使用比例。在html网页设计的时候会有width:20%。这使得不管网页界面怎么缩放,这个控件只占整个界面的宽的20%,Android中也有啊,那就是LinearLayout下的weight权重属性,但是遇到类似于ListView,RecyclerView这种不要脸的控件你也没辙啊。
最后推荐大家使用一个大三方,首先声明,我不是打广告的:鸿洋博客(Android屏幕适配方案)
一天不写代码,public都敲不顺手,三天不学习,活该做个单身狗。
网友评论