Android 在渲染之前获取文本所需的宽高

1. 获取文本展示所需的高度 如果设置了行数限制一定设置setEllipsize;setMaxLines

/**
 * 计算文本所需的高度
 *  setMaxLines(1)
 * setEllipsize(TextUtils.TruncateAt.END)
 * 如果设置多行 这两个属性要设置
 */
fun Context.calculateHeight(text: String?, fontSize: Float, itemWidth: Int): Int {
    val textView = TextView(this).apply {
        textSize = fontSize
    }
    text?.let {
        val builder =
            StaticLayout.Builder.obtain(it, 0, it.length, textView.paint, itemWidth).apply {
                setMaxLines(1)
                setEllipsize(TextUtils.TruncateAt.END)
            }
        return builder.build().height
    }
    return 0
}

/**
 * 计算文本所需的宽度
 */
fun Context.calculateWidth(text: String?, fontSize: Float): Float {
    val textView = TextView(this).apply {
        textSize = fontSize
    }
    text?.let {
        return textView.paint.measureText(it)
    }

    return 0f
}