可以通过使用 Android View 的 Measuring API 来解决此问题。具体来说,创建一个自定义 View,重写其 onMeasure 方法,并在其中对 TextView 进行测量。以下是一个示例代码:
@Composable
fun CustomTextView(text: String) {
AndroidView(factory = { context ->
TextView(context)
}) { textView ->
textView.text = text
}
val textViewMeasurer = remember {
object : View.MeasureSpec {
override fun get(spec: T): Int {
return when (spec) {
MeasureSpecHeight -> textView.measuredHeight // 获取测量过的高度
else -> error("Unsupported measure spec")
}
}
}
}
onCommit(text) {
textViewMeasurer.measure(
MeasureScope(
constraints = Constraints.unspecified(),
forceMinWidth = 0
)
) {
LayoutNode(0, 0, IncomingConstraints.WidthAtMost(0)) {
// 测量 TextView 的高度
CustomLayoutNode(textView.measuredWidth, textView.measuredHeight)
}
}
}
}
在 Compose 中使用这个自定义 View,就能够正确地测量 TextView 的高度了。