我在 Google 上搜索了多种使用 Jetpack Compose 在 Android 上支持多个屏幕尺寸的方法,最终找到了 Google 的文档: https://developer.android.com/guide/topics/large-screens/support-different-screen-sizes#compose
enum class WindowSizeClass { COMPACT, MEDIUM, EXPANDED }
@Composable
fun Activity.rememberWindowSizeClass() {
val configuration = LocalConfiguration.current
val windowMetrics = remember(configuration) {
WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(this)
}
val windowDpSize = with(LocalDensity.current) {
windowMetrics.bounds.toComposeRect().size.toDpSize()
}
val widthWindowSizeClass = when {
windowDpSize.width < 600.dp -> WindowSizeClass.COMPACT
windowDpSize.width < 840.dp -> WindowSizeClass.MEDIUM
else -> WindowSizeClass.EXPANDED
}
val heightWindowSizeClass = when {
windowDpSize.height < 480.dp -> WindowSizeClass.COMPACT
windowDpSize.height < 900.dp -> WindowSizeClass.MEDIUM
else -> WindowSizeClass.EXPANDED
}
// Use widthWindowSizeClass and heightWindowSizeClass
}
但这可能会对ldpi屏幕构成问题,那么该如何存储这些变量呢?我需要像以前一样在所有密度下的dimen文件夹中存储dimens值吗?因为例如,在400dp屏幕上的图像在ldpi屏幕上可能看起来非常大(约120dp)。
我对Jetpack Compose还很陌生,感觉有些困惑。非常感谢您的帮助。