如果项目中使用SmallWidth适配,而设计师给的标注又是px的,我们只要调整base_dp的值,再使用ScreenMatch生成该base_dp对应的一系列values-swXX,就可以在布局中直接写像素对应的dp_xx。
举个例子:比如设计师的设计图纸是720x1280的,我们就可以将base_dp的值设为720,即base_dp = 720,右键,点击ScreenMatch,生成base_dp=720对应的valuess-swXX文件。现在有个控件的宽是72px,就可以直接写dp_72,下面我们来推到一下。
标注图:72x / 720px = 1/10
因为base_dp=720,所以布局默认smallWidth对应的dp值是720dp,而在values-sw720的dimens中,dp_1=1dp,dp_2=2dp,...dp_72=72dp,...,所以,
布局:72dp / 720dp = 1/10
可以看出,布局中控件宽度写dp_72,同样占布局总宽的十分之一,和设计图效果一致。当程序运行到不同设备上时,会去查找当前设备对应的sw文件,例如我的测试机屏幕大小是1080x1920,像素密度为3,smallWidth对应的dp值是1080/3=360。在sw360中,dp_72的值如下如所示:
同样,36dp / 360dp也是十分之一,因此就实现了适配效果。这种适配方式的思想类似百分比布局,控件占屏幕大小比例是固定值。
我在布局中写了10个大小为dp_72的TextView, 打开开发者选项中的显示布局边界,下面是在不同设备上的显示效果,包括平板和手机。
手机sw360:
三星平板sw800:
小米平板sw768:
注:实现适配的前提,是在screenMatch.properties中有对应的sw值,否则系统会使用数值相近的sw文件,导致当前设备布局不适配。
如果还需要其他数值的sw文件,也可以在这里配置,配置好后鼠标移到studio左侧,右键选择ScreenMatch,生成新添加的sw文件即可。
上面的例子是当设计图宽为720的情况,如果你的设计图使用的是其他尺寸大小,如1080,可以把base_dp=1080,右键选择ScreenMatch更新1080对应的sw文件。