关于Android界面适配的思考及最终解决方案
一直以来都用 px映射表 来解决不同界面的适配性问题(参考: Android界面开发精要1:尺寸 )。最近在一些设备上发现,这种方案也有弊端:以UI图的基础设计是基于720*1280(如Galaxy Nexus)为例,最近发现有些设备的像素宽高比并不是如此,比如Nexus 4就是768*1280。
这种情形下,不同的映射方式会有不同的效果:
仔细思考就会发现问题的本质是: 控件宽高计算基准是不同的 。
这让我想起iOS开发中,其界面设计系统AutoLayout,就采用了一个计算公式:
也就是说,任何控件都可以以其他控件的属性值来定义自身的属性值,所以其可塑性非常高。不过实际应用中也会带来一个问题,就是太灵活,导致多重约束,有时候会彼此冲突。
仔细想想,最常见的视角参数应该就只有3个:
透过这3个参数,应该可以定义任意控件的属性值。
现在问题来了,Android怎么做到呢?答案是:**** android-percent-support-extend ****
对于值可以取:10%w , 10%h , 10% , 10%sw , 10%sh,缩写含义为
对于一开始的界面,最后xml文件为:
效果如下:
这种直接裸写百分比的方式比价繁琐,相较之下,目前采用 px映射表 的方案中写的px值直接在UI设计图中取就行,更加简单。
其实px映射表方案也就是百分比的方案,而且x值和y值已经分开,所以也可以解决正方形变形的问题。
目前需要客服的问题主要在于px映射为px,导致如果没有覆盖到设备的分辨率,就会出现问题,改成px映射为dp后,这种问题应该会减少很多。
Panda
2016-11-29