请仔细阅读上图中的文字。
或 查看原文
测量中,有三种常见模式。
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"/>
效果图: