android - Jetpack Compose:支持所有屏幕尺寸的最佳方式是什么?
问题描述
我在 Google 上搜索了多种使用 Jetpack compose 在 Android 上支持多种屏幕尺寸的方法,我终于找到了 Google 文档: https ://developer.android.com/guide/topics/large-screens/support-different-screen-sizes#撰写
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 屏幕和存储这些变量的位置可能是个问题?我是否需要像旧方法一样将尺寸值存储在所有密度的尺寸文件夹中?因为例如 400dp 屏幕上的图像在 ldpi 屏幕(~120dp)上可能看起来非常大,所以我很困惑,而且我是 jetpack compose 的新手。在此先感谢您的帮助。
解决方案
上面的代码只是一个例子。您可以基于此创建自己的代码以idea
满足您的需求。
您可以使用资源系统来保存维度,但我真的没有理由这样做。如果您的图像是 200dp,则应为 200dp。DP是动态的。是的,200dp 在小屏幕上会更大,但它应该是因为用户应该实际看到图像的内容。
您的应用程序布局不会在不同的屏幕尺寸和设置上中断,这是另一个与理论上的撰写无关的问题。您只需要以一种对字体/dpi 大小变化不太敏感的方式设计布局,这意味着轻微的字体/dpi 大小变化不应破坏布局。
除此之外,您可以为屏幕配置编写不同的可组合项,这些配置与您的标准可组合项的工作差异太大。
推荐阅读
- javascript - 嗨,我正在尝试使用 JQuery.ajax 从锚标记中抓取 href
- start-activity - SecondActivity 不可见 - 不使用 AppCompatActivity
- ffmpeg - CMAKE ExternalProject_Add 添加不需要的双引号
- node.js - 使用新的节点快速服务器连接到现有 MongoDB
- c# - 如何以打开文件对话框样式选择正在运行的进程?
- kubernetes - 给定一些 kubernetes 模板,如何获取 docker 镜像列表?
- sql-server - ASP.Net MVC - 插入和更新
- java - Postgres 错误:门户“C_n”不存在
- javascript - Changing VS code style
- javascript - 如何将变量“if”应用于第 9 行