假設我有一個固定尺寸的矩形,里面有一些文字。由于用戶可以通過設備上的 "系統-可訪問性 "設定來更改字體大小,因此字體可能不適合放在固定大小的矩形中。如果發生這種情況,我們希望將文本呈現在矩形之外。
AFAIK 我應該以某種方式測量文本的寬度(例如),并查看它是否適合在矩形內,如果不適合,則以不同的方式布局組件。
我如何在Jetpack Compose中做到這一點呢?
因此,通過這個偽代碼,如果文本不適合在Box內,我想在它下面布局文本,從而引入一個Column等。
@Composable
fun myView() {
val text = Text("Some text")
Box(modifier = Modifier.size(40.dp)) {
文本
}
}
uj5u.com熱心網友回復:
使用onTextLayout你可以得到繪制的文本的大小。
為了防止在計算尺寸時實際繪制,你可以使用drawWithContent修改器。
var textSize by remember { mutableStateOf<IntSize?> (null) }
val density = LocalDensity.current
val maxDimensionDp = remember(textSize) {
textSize?.let { textSize ->
with(density) {
maxOf(textSize.width, textSize.height).toDp()
}
}
}
val textComposable = @Composable {
文本(
"一些文本"。
onTextLayout = {
textSize = it.size
},
modifier = Modifier.drawWithContent {
if (textSize != null) {
drawContent()
}
}
)
}
when {
maxDimensionDp == null -> {
//計算尺寸。
//由于drawWithContent,它不會被繪制。
textComposable()
}
maxDimensionDp < 40.dp -> {
Box(modifier = Modifier.size(40.dp).background(Color.Red) ) {
textComposable()
}
}
else -> {
Column(modifier = Modifier.background(Color.Green)) {
textComposable()
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333708.html
標籤:
上一篇:洗掉URL中的尾部斜線
