来自SwiftUI,我想创建一个Text
的视图,它有一个圆形的背景,圆形的宽度/高度随着Text
内文本的变长而增长。
由于Compose中没有SwifUI
中的Circle()
,我只创建了一个Spacer
并裁剪了它。下面的代码使用ConstraintLayout
,因为我不知道如何获得Text
的宽度,以便将Circle
可组合文件的大小设置为相同:
@Composable
fun CircleDemo() {
ConstraintLayout {
val (circle, text) = createRefs()
Spacer(
modifier = Modifier
.background(Color.Black)
.constrainAs(circle) {
centerTo(text)
}
)
Text(
text = "Hello",
color = Color.White,
modifier = Modifier
.constrainAs(text) {
centerTo(parent)
}
)
}
}
我可以使用一个mutableStateOf { 0 }
,我在附加到Text
的onGloballyPositioned
修改器中更新它,然后将其设置为Spacer
的requiredSize
,但是1。这似乎很愚蠢,2。Spacer
现在绘制在ConstraintLayout
的边界之外。
从视觉上看,我希望实现这一点:
我该怎么做呢?谢谢:)
4条答案
按热度按时间w9apscun1#
您必须根据文本的尺寸计算背景圆的尺寸。
可以使用基于**
Modifier.layout
**的自定义修改器:然后将其应用于
Text
,背景为**CircleShape
**:wgmfuz8q2#
也可以从textView本身的修饰符使用drawBehind,如下所示:
当然,你可以进一步自定义半径和其他属性,因为你想!
pgx2nnw83#
rvpgvaaj4#
使用一个透明色内的黑色圆圈作为背景。背景可以拉伸以填充视图,圆圈应该拉伸得很好而没有伪像。