Android TextView 常見問題彙總

QQ羣:372135639

android:singleLine=”true” 數字英文字母顯示,省略號只有一個點的問題。

問題描述:

使用SingleLine屬性時,當字符串含有純數字或者字母的時候,自動截取的省略號,只有一個點。而漢字 字符串或者混合字符串就不會出現該問題。

問題解決方法:

據悉這是Android4.0後原生代碼的Bug,TextView賦值的字符串後邊接一個 全角的空格

singleLine=”true”與Android:maxLines=”1”的不同之處

問題描述:

Android 的TextView 裏面有兩個屬性 singLine 和maxLines 。 從字面意思來理解,這兩個都是限制Text的行數。那麼singleLine=”true” 和maxLine=”1” 都是限制爲一行,有什麼區別呢?

先看看Google Document 的解釋:
android:maxLines   
Makes the TextView be at most this many lines tall. 

android:singleLine 
Constrains the text to a single horizontally scrolling line instead of letting it wrap onto multiple lines, and advances focus instead of inserting a newline when you press the enter key. 

maxLines 是在限制高度, singleLine 是強制不讓換行。具體效果有什麼區別呢? 從高度來講是一樣的,兩者肯定都顯示一行,但從換行的位置來講就有區別了,maxLines並不會改變其換行的位置,而singleLine則會。從這個角度講,singleLine的顯示會好一些,因爲如果超過一行singleLine會在一行內顯示,後面加上”…”。而maxlines=”1” 則不會,它依然會在原來換行的位置換行,所以有時候一行不滿,但是卻不顯示剩下的部分。

同樣一句話 maxLines截取之後顯示不全,singleLine就會在一行範圍內全部顯示。

例如:鍢庡槑0009912  這個字符串。
 maxLines效果是:  鍢
 singleLine效果是: 鍢庡槑00

如果都加上android:ellipsize=“end”
 maxLines效果是:  鍢...
 singleLine效果是: 鍢庡槑00...

總而言之,如果你要用省略號截取字符串顯示,建議用singleLine。如果你要控制顯示行數,建議用maxLines。

android:ellipsize 的屬性的使用

**EidtText和textview中內容過長的話自動換行,使用android:ellipsize與android:singleine可以解決,使只有一行。

EditText不支持marquee

用法如下:

在xml中

android:ellipsize = "end"    省略號在結尾

android:ellipsize = "start"   省略號在開頭

android:ellipsize = "middle"     省略號在中間

android:ellipsize = "marquee"  跑馬燈

android:singleline = "true"

當然也可以用代碼語句

tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));

tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));

tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));

tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));

tv.setSingleLine(true);

android:ellipsize 與 android:maxLines 屬性衝突的問題

問題描述:

當TextView中的文本內容長度超過了TextView的寬度,如果是單行,超出部分將被截斷,此時我們都會使用android:ellipsize,該屬性可以用了來省略顯示文本,但很可能不像我們原以爲的那樣工作。

很多人認爲這是屬性衝突造成的,其實不然。

下方的紅色很重要,由於在通用控件中可能設置了 singleLine = true;
所以直接使用setMaxLines(n),是不起作用的

解決方法如下:

TextView tv_text = (TextView) vDescParent.findViewById(R.id.tv_text);
tv_text.setText(ss.toString());
// 設置可以多行顯示
tv_text.setSingleLine(false);
tv_text.setMaxLines(3);
tv_text.setEllipsize(TextUtils.TruncateAt.valueOf("END"));

或者:

Androidandroid:ellipsizeandroid:maxLines屬性不衝突,
只是跟append()方法衝突,
需要把內容拼成一字符串
然後setText()
發佈了35 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章