节奏盒子2官方正版
152.97M · 2025-09-13
我们先截图看看问题:
这是平板展示的效果,可以看到,内容太大了,可见范围太小,这是现在的问题。
这是手机的展示的效果,挺好的
我们想要平板也这样
(1)activity
abstract class BaseActivity<VB : ViewBinding, VM : BaseViewModel> : BaseFrameActivity<VB, VM>(),CustomAdapt {
override fun isBaseOnWidth() = !PhoneUtils.isPad()
override fun getSizeInDp(): Float {
return if (!PhoneUtils.isPad()) 360f else 720f
}
}
(2)fragment
abstract class BaseFragment<VB : ViewBinding, VM : BaseViewModel> : BaseFrameFragment<VB, VM>(),CustomAdapt{
override fun isBaseOnWidth() = !PhoneUtils.isPad()
override fun getSizeInDp(): Float {
return if (!PhoneUtils.isPad()) 360f else 720f
}
}
(3)application(可选)
open class BaseApplication : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
//屏幕适配
AutoSize.initCompatMultiProcess(this)
AutoSizeConfig.getInstance().setCustomFragment(true)
}
}
但为什么360f在平板上ui变得很大呢?而在手机就正常呢?
android-autosize
是一个屏幕适配库,CustomAdapt
接口允许你为特定页面(Activity/Fragment)定制专属的屏幕适配方案,不同于全局设置。
isBaseOnWidth()
作用:决定适配基准:告诉库使用宽度还是高度作为适配基准
返回 true
:以宽度为基准(常见于手机竖屏)
返回 false
:以高度为基准(常见于平板横屏)
如果是平板(isPad()
)就返回 false
(以高度为基准),否则返回 true
(以宽度为基准)
getSizeInDp()
作用:设置设计稿尺寸:告诉库你设计稿的基准尺寸
手机:使用 360dp(常见手机设计稿宽度)
平板:使用 720dp(常见平板设计稿高度)
平板横屏特性:
宽度变化范围大(10寸到13寸差30%)
高度变化范围小(所有平板横屏高度≈手机竖屏高度)
核心约束 : 宽度是刚性约束 (内容不能超宽) | 高度是刚性约束 (分区比例不能崩) |
简单来说,其实根本原因在于 autosize
的底层算法,对于基准为宽度和高度的逻辑不同。
第一点:在写一个宽度的时候,尽量使用0dp,然后设置weight,而不是写死宽度,不然就会很小。
第二点:一些列表,可以考虑在平板的时候排列三行,非平板默认两行,把空间给利用起来。
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
AutoSizeConfig.getInstance().setBaseOnWidth(!PhoneUtils.isPad())
}
}
<meta-data
android:name="design_width_in_dp"
android:value="360" />
<meta-data
android:name="design_height_in_dp"
android:value="720"/>
直接这样就行,统一设置。
可以理解为
override fun getSizeInDp(): Float {
return if (!PhoneUtils.isPad()) 360f else 720f
}
getSizeInDp和meta-data是同样的内容,根据平板还是手机去取对应的值就可以。
好了,这篇文章就到这里,我们下篇文章见。