android 如何使用屏幕大小百分比在Jetpack合成中创建响应式布局

zdwk9cvp  于 2022-12-25  发布在  Android
关注(0)|答案(1)|浏览(127)

在我的应用中,有一个按钮,它的高度需要正好是屏幕高度的0. 2倍,比如屏幕大小是1000 px,那么它的高度应该是200 px,不管屏幕大小是多少,它的高度都应该是屏幕的0. 2倍。
然而,无论我做了什么,我都不能让它在不同的屏幕大小下工作相同。
以下是我的方法:

1)从本地配置使用DP

// Results in very small for Pixel 2 and almost correct in Pixel 6 emulator
// So small that text in the button disappears and
// seem to took 0.1 of the screen rather than 0.2
Column(
   verticalArragment = Arrangment.SpaceBetween
){
   Text(titleText)
   MyButton(
       modifier = Modifier.height(
           (LocalConfiguration.current.screenHeightDp * 0.2f).dp
       )
   )
}

2)从上下文中获取高度。displayMetrics

// Results in almost correct on Pixel 2 and very large on Pixel 6 emulators
// So large that more than 0.2 times of the screen height
Column(
   verticalArragment = Arrangment.SpaceBetween
){
   Text(titleText)
   MyButton(
       modifier = Modifier.height(
           (LocalContext.current.displayMetrics.heightPixels * 0.2f).dp
       )
   )
}

此外,MyButton与Compose提供的普通按钮没有区别。
与Compose相比,使用GeometryReader或使用MediaQuery.of(上下文)在SwiftUI上执行相同的操作会产生正确的行为。
任何帮助都很感激。

zaq34kh6

zaq34kh61#

我发现了我的错误,尽管我写在了帖子上。我使用的是Compose提供的Button组件,它有自己的填充。这就是为什么它会随着内容(文本)沿着折叠。我已经将它改为Surface并实现了我的自定义按钮,一切都很好。

相关问题