使用中遇到的问题
我们知道 AutoSize 是一个百分比适配框架,只能保证一个维度进行适配,而且这个维度是在我们初始化的时候就指定的。
问题来了,假设我们的设计稿是1920x1080,并且我们指定以宽度方向进行适配。
手机分辨率为1920x1080:
可以完美适配。
手机分辨率为1812x1080(举个栗子而已):
宽度方向完美适配,高度方向会被压缩(竖直方向可以滚动的页面除外)。
这个时候最好是能够按照高度进行适配,这样一来,高度方向可以填充,宽度方向也不至于应为超出屏幕而被压缩。
手机分辨率为2340x1080:
宽度方向完美适配,高度方向有可能留白,这个我们可以通过 match_parent
或者 layout_weight
来解决。但是如果我们一开始指定是高度方向进行适配,在该分辨率下宽度方向就会被压缩。
结论:
根据不同的设备动态初始化我们的适配维度。
解决办法
private fun initAdapt() {
val config = AutoSizeConfig.getInstance()
.setLog(true)
.setUseDeviceSize(true)
val screenWidth = config.screenWidth
val screenHeight = config.screenHeight
val designWidthInDp = config.designWidthInDp
val designHeightInDp = config.designHeightInDp
val rateWidth = screenWidth.toFloat() / designWidthInDp.toFloat()
val rateHeight = screenHeight.toFloat() / designHeightInDp.toFloat()
//动态决定以哪一维度进行适配
if (rateWidth > rateHeight) {
config.setBaseOnWidth(false)
} else {
config.setBaseOnWidth(true)
}
}
与 tinker 冲突问题
这个在 issues 中有提到
就是改用非反射的方式接入 tinker 即可,否则 DefaultAutoAdaptStrategy 的 applyAdapt() 方法不会执行,适配也就无法生效。
新的问题:
改用非反射方式接入之后适配生效了,但是 tinker 在加载补丁的时候却失败了,抛出了异常
"you must set " + KEY_DESIGN_WIDTH_IN_DP + " in your AndroidManifest file"
解决办法:
private fun initAdapt() {
val config = AutoSizeConfig.getInstance()
.setLog(true)
.setUseDeviceSize(true)
//解决与tinker的冲突问题
.setDesignWidthInDp(360)
.setDesignHeightInDp(640)
val screenWidth = config.screenWidth
val screenHeight = config.screenHeight
val designWidthInDp = config.designWidthInDp
val designHeightInDp = config.designHeightInDp
val rateWidth = screenWidth.toFloat() / designWidthInDp.toFloat()
val rateHeight = screenHeight.toFloat() / designHeightInDp.toFloat()
//动态决定以哪一维度进行适配
if (rateWidth > rateHeight) {
config.setBaseOnWidth(false)
} else {
config.setBaseOnWidth(true)
}
}
至此适配和 tinker 都可以正常工作了~
还有一个问题不知道咋弄,希望看到的同学知道的能给个解决办法~,不胜感激!
问题如下:
项目是 kotlin 写的,通过非反射方式接入 tinker 的时候需要引入 tinker-android-anno
annotationProcessor("com.tinkerpatch.tinker:tinker-android-anno:1.9.14")
compileOnly("com.tinkerpatch.tinker:tinker-android-anno:1.9.14")
引入之后项目在编译的时候会出现一个警告
w: 警告: 来自注释处理程序 'org.jetbrains.kotlin.kapt3.base.ProcessorWrapper' 的受支持 source 版本 'RELEASE_7' 低于 -source '1.8'
查了很多资料,不知道咋解决,希望知道的同学给支个招哈~