2013-08-02 95 views
8

後額外字符我已成立了一個文本視圖如下:安卓:ellipsize端 - 省略號

<TextView 
      android:id="@+id/TextView_top" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginTop="5dp" 
      android:ellipsize="end" 
      android:maxLines="3" 
      android:textColor="@color/white" 
      android:textIsSelectable="false" 
      android:textSize="14sp" /> 

內部文本由佈局充氣編程設定,用XML Feed中的文本。我檢查了源代碼,沒有任何雜亂的字符或換行符。

在運行Android 4.3的Nexus 4上測試此TextView我看到了奇怪的行爲。

裏面的字符串結尾:「」 Lorem存有悲坐阿梅德」

在這是在合適的地方截斷了Nexus,但不是與像省略號字符結尾:‘DOL ......’,我「M獲得‘DOL ......的’半遮掩,因爲它突破了保證金的最後一個字符。

增加保證金,然後給了我‘存有...... DOL’結尾。

我我已經在我的其他測試設備上檢查過這個設備:一個Galaxy S3運行4.1.2和一個運行4.0.3的Desire C,並且它不存在。

是否有其他人用ellipsize看到過這種行爲:end?對於我可能做錯的任何建議或我如何解決此問題?

回答

6

通過大量的試驗和錯誤,我發現它是由'\ n'字符造成的。在文本中某處存在新行時,即使在橢圓大小之後,橢圓大小=「結束」也存在某種問題。

做簡單:

text = text.replace('\n',' '); 

固定的這個問題對我來說

+0

謝謝。這對我來說也是訣竅。我有多個換行符,並且不需要用空格替換它們,只是擺脫它們,所以我用:text.replaceAll(「\ n」,「」) – Keab42

+2

這可行,但如果你想保持你的換行符字符在? – kassim

0

我之前遇到過類似的問題。 我建議不要在'maxLines'中使用'ellipsize'選項。 添加橢圓標記文本視圖,並且可以通過程序控制。

佈局

<TextView 
     android:id="@+id/multiLineText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:maxLines="3"/> 

<TextView 
     android:id="@+id/ellipsizeMarkText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:text="..."/> 

代碼

if(multiLineText.getLineCount() > multiLineText.getMaxLines()) { 
    ellipsizeMarkText.setVisibility(View.VISIBLE); 
} else { 
    ellipsizeMarkText.setVisibility(View.GONE); 
}