Android 文字的测量

Android 文字的测量

private fun test1() {
  textView.post {
    val textWidth = textView.measuredWidth
    val textHeight = textView.measuredHeight
    Log.e(TAG, "方式一:$textWidth $textHeight") //方式一:255 63
  }
}

private fun test2() {
  val textSize = textView.textSize
  val text = textView.text.toString()

  val paint = Paint().apply {
    this.textSize = textSize
  }
  val textWidth = paint.measureText(text)
  Log.e(TAG, "方式二:$textWidth") //方式二:255.0
}

private fun test3() {
  val textSize = textView.textSize
  val text = textView.text.toString()

  val rect = Rect()
  val paint = Paint().apply {
    this.textSize = textSize
    getTextBounds(text, 0, text.length, rect)
  }
  val textWidth = rect.width()
  val textHeight = rect.height()
  Log.e(TAG, "方式三:$textWidth $textHeight") //方式三:249 37
}

private fun test4() {
  val textSize = textView.textSize
  val text = textView.text.toString()

  var textWidth = 0F
  val cWidths = FloatArray(text.length)
  val paint = Paint().apply {
    this.textSize = textSize
    getTextWidths(text, cWidths)
  }
  cWidths.forEach {
    textWidth += it
  }
  Log.e(TAG, "方式四:$textWidth") //方式四:254.28516
}

getTextBounds()measureText()的区别

通过观察运行的结果,发现使用measureText()测量的值比getTextBounds()的值要大一些。

  • measureText():它测量的是文字绘制时所占用的宽度,每个文字之间都会有一定的间距,所以实际占用会更宽一点。
  • getTextBounds():它测量的是文字的显示范围,是一个矩形区域,这个矩形区域尽可能的缩小,直到恰好紧紧包裹文字,这个矩形的范围就是这段文字的bounds。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值