在 Compose 中,我们如何获取可组合项在屏幕中的位置或大小?例如,我试图将地图相机聚焦在特定边界之间并添加填充。这里我需要获取与寻呼机顶部位置和TopBar底部位置相对应的填充。
目前该屏幕的代码如下:
BoxWithConstraints {
MapViewWithMarkers(...)
TopAppBar(
modifier = Modifier
.fillMaxWidth()
.statusBarsPadding(),
backgroundColor = Color.Transparent,
elevation = 0.dp,
)
HorizontalPager(
state = pagerState,
modifier = Modifier
.align(Alignment.BottomCenter)
.fillMaxWidth()
.navigationBarsPadding()
.padding(bottom = 32.dp),
itemSpacing = 8.dp,
) { page ->
val hikeOnMapCard = hikeMarkerList[page]
HikeOnMapCard(hikeOnMapCard) {
viewModel.hikeOnMapCardClicked(hikeOnMapCard.id)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想将与此屏幕上的 TopAppBar 大小和 Pager 大小相对应的填充转发给 MapViewWithMarkers Composable
谢谢 !
文档说修饰符是从左边应用的。但从这个例子来看,它们似乎是从右侧应用的:首先边框,然后填充,因为文本和边框之间没有空格
Text("Hi there!", Modifier.padding(10.dp).border(2.dp, Color.Magenta))
Run Code Online (Sandbox Code Playgroud)
我正在 jetpack compose 的文本字段中工作。我想建立这样的东西
TextField(
value = value,
onValueChange = {
value = it
},
modifier = Modifier
.requiredWidth(56.dp)
.padding(10.dp),
colors = TextFieldDefaults.textFieldColors(
backgroundColor = OffWhite,
focusedIndicatorColor = TealLight,
cursorColor = TealLight
)
)
Run Code Online (Sandbox Code Playgroud)
场景1
当我尝试这个时
.requiredWidth(56.dp)
Run Code Online (Sandbox Code Playgroud)
或者
.width(56.dp)
Run Code Online (Sandbox Code Playgroud)
设计上看起来是这样的
场景2
当我尝试这个时
.widthIn(min = 56.dp)
Run Code Online (Sandbox Code Playgroud)
看起来像这样
场景3
当我尝试这个时
.fillMaxWidth()
Run Code Online (Sandbox Code Playgroud)
它占据了整个屏幕的宽度。
所以我的问题是哪一个用于哪种情况?在我的情况下最好的属性是什么?