Android 为什么TextView文本有内容却显示为空?

来源:互联网 发布:有机合成工艺优化 编辑:程序博客网 时间:2024/04/27 21:09

在进行 Android 开发的时候,不知道大家有没有遇到这么一种情况:

在用TextView 显示文本内容时,如果说在 xml 文档中设置的 android:layout_width 只有5px,但是要显示的文本内容(例如“This is a example.”) 很长超过 textView 预留的宽度(此处为:5px)时会看到 TextView 中显示的内容是空白的情况。这个时候再三检查确定自己属性设置无误后就会开始有疑问:

 Android 是怎样判断处理要显示的文本内容的呢?

其实这个时候,只要看了 Android 源码就会知道了,一般情况下在 TextUtils.java 中, ellipsize() 的动作是,如果文本内容超过 textview 预留长度,且预留长度不足以显示一个字符时,ellipsize 动作将直接返回 “”,这是 textview 为什么显示为空的最直观的原因。

再深入一点讲的话,这个跟 BufferType 相关。

从帮助文档可以看到,BufferType 有3个值,分别为:NORMAL, EDITABLE, 和 SPANNABLE,上面所说的一般情况指的是 " Normal ” 的时候,这个就会出现刚刚讲到显示为“” 的状况,那如果想TextView 尽可能显示文本内容,即使显示不了也以一个或者几个“.”显示时,要怎么办呢?

这个就跟  textview setText 时 BufferType 的值密切相关了。

根据代码测试结果,通过 tv.setText(textcontent, BufferType.xxx);对 textview 设置文本,如果该 textView 在 xml 设置的 singleLine = "true"、ellipsize =" end"、marqueeRepeatLimit ="marqueen_forever" focusable="true",那么,在显示的文本内容不为空,且 textview 预留宽度不足以显示一个字符的情况下,会根据 BufferType.xxx 显示不同的结果:

1、NORMAL:显示为空;

2、EDITABLE:会根据 textView 宽度显示1 or 几个“.”;

3、SPANNABLE:会根据 textView 宽度显示 1 or 几个“.”;

 

至于 EDITABLE 和 SPANNABLE 之前的区别,目前还尚待查证!

0 0