大家拿到UI给的设计图以后,是不是抱怨过标识的都是px,我项目里面用dp,唉,和UI妹子讲dp的问题,UI MM也不理解,直接和你翻白眼 。为了解决这样的问题采用引入百分比的方式进行完美适配-------------------
其实我们的解决方案,就是在项目中针对你所需要适配的手机屏幕的分辨率各自建上面的一个文件夹。
比如480*320的分辨率为基准
可以看到x1 = 480 / 基准 = 480 / 320 = 1.5 ;
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="@dimen/x160" android:layout_height="@dimen/y160" android:layout_gravity="center" android:gravity="center" android:text="适配开始了" /> </FrameLayout>
可以看到我们的宽度和高度定义为x160,其实就是宽度的50%;
这样写出的布局基本就可以全分辨率适配了
好了,有个最主要的问题,我们没有说,就是分辨率这么多,尼玛难道我们要自己计算,然后手写?
2、自动生成工具(也可以自己写)
下载请
链接: https://pan.baidu.com/s/1jIJwAhg 密码: g2br
内置了常用的分辨率,默认基准为480*320,当然对于特殊需求,通过命令行指定即可:
例如:基准 1280 * 800 ,额外支持尺寸:1152 * 735;4500 * 3200;
java -jar 文件名.jar 800 1280 735,1152_3200,4500
自动生成了res目录所有的文件夹COPY到项目当中
因为对于没有生成对应分辨率文件的手机,会使用默认values文件夹,如果默认values文件夹没有(即没有对应的分辨率、没有对应dimen)就会报错,从而无法进行屏幕适配。
( 注意对应单位改为dp,而不同于上面的px。因为不知道机型的分辨率,所以默认分辨率文件只好默认为x1=1dp以保证尽量兼容(又回到dp老方法了), 这也是这个解决方案的一个弊端)
( 注意对应单位改为dp,而不同于上面的px。因为不知道机型的分辨率,所以默认分辨率文件只好默认为x1=1dp以保证尽量兼容(又回到dp老方法了), 这也是这个解决方案的一个弊端)
总结
使用上述的适配方式,应该能进行90%的适配了,但其缺点还是很明显:
- 由于实际上还是使用px作为长度的度量单位,所以和google的要求使用dp作为度量单位会有所背离
- 必须尽可能多的包含所有分辨率,因为这个是使用这个方案的基础,如果有某个分辨率缺少,将无法完成该屏幕的适配
- 过多的分辨率像素描述xml文件会增加软件包的大小和维护的难护