TextView及其内部文字宽高测量

本文详细探讨了TextView在不同模式下的宽度和高度测量,包括EXACTLY、AT_MOST、UNSPECIFIED模式。通过实例展示了如何获取TextView的宽度,分析了文字一行、多行、手动换行及自动换行时的测量结果。同时,文章提到了行间距对测量高度的影响,并提供了获取准确高度的方法。
摘要由CSDN通过智能技术生成

在这里插入图片描述
请仔细阅读上图中的文字。
查看原文

测量中,有三种常见模式。

1、EXACTLY
当我们将控件的“layout_width”属性或者“layout_height”属性指定为具体数值时,比如“android:layout_width=“200dp””,或者指定为“match_parent”时,系统会使用这个模式。

2、AT_MOST
当控件的“layout_width”属性或者“layout_height”属性设置为“wrap_content”时,控件大小一般会随着内容的大小而变化,但是无论多大,也不能超过父控件的尺寸。

3、UNSPECIFIED
表示开发人员可以将视图按照自己的意愿设置成任意的大小,没有任何限制。这种情况比较少见,一般在绘制自定义View的时候才会用到。

下面,是对各种情况下的测量,测试较多,请耐心看完

现在,有这样一个TextView

 <TextView
	android:id="@+id/tv"
	android:background="#00ff00"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:textSize="20dp"/>

先进行“宽度”的测量
1、给TextView设置内容,

var str = "一行一行一行"
tv.text = str

常见的有2种宽度获取方式:通过API获取控件的宽;测量文字的长度。如下:

tv.measure(0, 0)
Log.e("宽度:", "${tv.measuredWidth}")
Log.e("高度", "${tv.measuredHeight}")

var textPaint: TextPaint = TextPaint(Paint.ANTI_ALIAS_FLAG)
//单词大小是 20dp
textPaint.textSize = UiUtils.dp2px(this, 20f).toFloat()
Log.e("measureText ","${textPaint.measureText(str)}")

对应日志:

宽度:: 360
高度: 81
measureText: 360.0

这个360表示 360px,准确么?加个辅助线

 <View
	android:layout_marginStart="360px"
	android:background="#ff0000"
	android:layout_width="1dp"
	android:layout_height="match_parent"/>

效果图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值