如果参数的初始值为 dp,如何获取 compose 中 fillMaxHeight(...) 和 fillMaxWidth(...) 的正确分数参数?

问题描述 投票:0回答:1

随着我在 kotlin 中推进最新的个人项目 Android Studio,我最近意识到我必须让我的组件在每种类型的屏幕上统一缩放,无论屏幕的分辨率或 dpi(每英寸密度)如何。问题是,到目前为止,对于所有按钮、文本字段、框、列等,我已经以 dp(与密度无关的像素)为单位设置了高度和宽度。因此,各个组件的物理尺寸在每种类型的屏幕上都是相同的,这会导致渲染问题。我想要的是所有组件的宽度和高度在每种类型的屏幕上按比例相同。根据我在互联网上的发现,我了解到过渡到我想要的最快方法是使用函数 fillMaxWeight() 和 fillMaxWidth() 应用于带有参数“fraction”的修饰符。

因此我的问题是,如果我有 dp 中的 current_value 以及我在模拟器中模拟的基本手机的屏幕分辨率,我如何获得该子单元值?它只是一个比率,例如:currentHeight/screenHeight 或currentWidth/screenWidth?那么如何获取屏幕的screenHeight和screenWidth呢?关于最后一个问题,我已经读过这篇文章了:

获取屏幕的宽度和高度

我想问更多的是,关于改变屏幕方向的情况,第一个答案是否完全正确?它仍然给出屏幕宽度和高度的正确值吗?我附上下面答案的代码片段。

@Composable
fun PostView() {
  val configuration = LocalConfiguration.current

  val screenHeight = configuration.screenHeightDp.dp
  val screenWidth = configuration.screenWidthDp.dp

  ...

}

提前非常感谢。

android kotlin android-studio graphics android-jetpack-compose
1个回答
0
投票

好的。所以,我意识到我的问题可能有点太具体了,但在尝试了一种解决方法之后,我决定应该分享结果。

基本上,正如我在问题中已经提到的那样,我使用了以下比率:

当前_高度/屏幕_高度当前_宽度/屏幕_宽度

current_Height 和 current_Width 值是以 dp 为单位测量的高度和宽度的一些硬编码值,仅适用于作为起始测试用例的一种类型的屏幕。此外,screen_Height 和 screen_Width 值是按照问题中提供的代码片段获取的。毕竟我已经尽可能多地使用了功能

modifier.fillMaxWidth(fraction = ...)modifier.fillMaxHeight(fraction = ...) 而只是硬编码宽度和高度的 dps 数值。

最后,我检查了 3 个不同分辨率的结果: 720×1280 1080×2400 1440×3120 而且看起来没有任何渲染问题。

我仍然没有检查更改屏幕方向的情况。如果我愿意,我会回来更新。

© www.soinside.com 2019 - 2024. All rights reserved.