【Android】在控件、视图绘制或改变之后如何获取其部分状态和属性(比如高、宽、TextView绘制后的文字行数等)
2017-02-23 14:39
941 查看
拿 Textview 来讲,比如我从服务器获取到一串字符,然后给 Textview 设置 text,当显示出来后想获得其行数。
当 Textview 没有绘制出来前我们通过 Textview.getLineCount() 获取到的行数是0,所以我们得在其绘制之后才能得到其真正显示的行数。
这个时候我们得通过
ViewTreeObserver.OnGlobalLayoutListener
这个接口来对Textview进行监听。
对于这个接口,网上给的解释是:
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类。
需要注意的是OnGlobalLayoutListener可能会被多次触发,因此在进行相应操作之后,要将OnGlobalLayoutListener注销掉。
下面我们来看代码:
代码中的line就是绘制出来后TextView中文字的行数。
当然我们也可以获取其绘制之后的高,宽:
当然这个方法不仅仅对TextView有效,对其它控件也有效。
通过这个方法不仅可以获取到对应的属性,也可以进行一些其它操作(比如重新修改控件高、宽,更新UI等)。
当 Textview 没有绘制出来前我们通过 Textview.getLineCount() 获取到的行数是0,所以我们得在其绘制之后才能得到其真正显示的行数。
这个时候我们得通过
ViewTreeObserver.OnGlobalLayoutListener
这个接口来对Textview进行监听。
对于这个接口,网上给的解释是:
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类。
需要注意的是OnGlobalLayoutListener可能会被多次触发,因此在进行相应操作之后,要将OnGlobalLayoutListener注销掉。
下面我们来看代码:
ViewTreeObserver vto = textview.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int line = textview.getLineCount(); textview.getViewTreeObserver().removeGlobalOnLayoutListener(this); } });
代码中的line就是绘制出来后TextView中文字的行数。
当然我们也可以获取其绘制之后的高,宽:
ViewTreeObserver vto = textview.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int height = textview.getHeight(); int width = textview.getWidth(); textview.getViewTreeObserver().removeGlobalOnLayoutListener(this); } });
当然这个方法不仅仅对TextView有效,对其它控件也有效。
通过这个方法不仅可以获取到对应的属性,也可以进行一些其它操作(比如重新修改控件高、宽,更新UI等)。
相关文章推荐
- android如何改变editText控件中部分文字的格式
- android如何改变editText控件中部分文字的格式
- android如何改变editText控件中部分文字的格式
- android 获取textView的行数为0,获取控件的宽高为0的解决办法
- Android控件TextView中ellipsize属性(设置当文字长度超过textview宽度时的显示方式)
- Android textview改变部分文字的颜色和string.xml中文字的替换
- android TextView 首行缩进与部分文字改变颜色大小效果
- android textview改变部分文字的颜色和string.xml中文字的替换
- android textview改变部分文字的颜色和string.xml中文字的替换
- android textview改变部分文字的颜色
- android textview改变部分文字的颜色和string.xml中文字的替换
- android textview改变部分文字的颜色和string.xml中文字的替换
- android textview改变部分文字的颜色
- android textview改变部分文字的颜色和string.xml中文字的替换
- android textview改变部分文字的颜色和string.xml中文字的替换及部分内容设置颜色、字体、超链接、图片
- Android中如何让TextView显示指定的行数并且多出的部分显示省略号
- android textview改变部分文字的颜色和string.xml中文字的替换
- Android 关于TextView中,设置指定部分文字改变颜色,和指定部分文字点击事件
- android TextView控件加背景和字体颜色多状态控制时,部分状态不起作用问题
- android TextView 小属性(积累)---------限制TextView行数后,文字未显示完全出现...