是否可以通过编程方式获取和设置窗口上元素的位置/边界?假设我们有一个简单的Text
,并且想在50dp
轴上移动它y
。
Text(text = "Hello", modifier = Modifier.padding(8.dp).fillMaxWidth())
答案 0 :(得分:1)
如果我正确解释了您的问题,那么您想在其上移动文本50dp y轴和“文字”以及文字上方的50dp空间应为可点击的。
这是创建小型可定制组合物的一种解决方案:
@Composable
fun TextWithPos(content: String, modifier: Modifier, x: Int, y: Int, clickFun: () -> Unit = {}) {
Text(text = content, modifier = modifier
.defaultMinSizeConstraints(minHeight = y.dp)
.clickable(onClick = clickFun)
.padding(top = y.dp))
}
此Composable设置具有{d1(minHeigth
未使用的minWidth
此处),然后设置clickable
,然后设置具有某些dp的padding
。实际上,撰写
不再区分边距和填充,它只是一些空格。
按顺序编写修饰符,因此clickable
覆盖了空格(填充)
以及Text
中的文本。如果将clickable
移到padding
下方,则
可点击区域仅覆盖Text
中的文本。
在此处显示带有可点击操作的预览,以显示可点击区域。因为 函数设置修饰符并将其移交给自定义组合 修饰符优先于自定义可组合对象中设置的修饰符。
@Preview(showBackground = true)
@Composable
fun TextPosPreview() {
PlaygroundTheme {
Column() {
TextWithPos(content = "Hello", modifier = Modifier
.padding(start = 16.dp, end=16.dp), x = 0, y = 50) {
counter++
}
var counter by remember { mutableStateOf(1) }
Text(text = counter.toString(), modifier = Modifier
.padding(16.dp))
}
}
}
答案 1 :(得分:0)
https://developer.android.com/reference/kotlin/androidx/ui/layout/package-summary#offset
Text(text = "Hello", modifier = Modifier.padding(8.dp).offset(y = 50.dp))