2015-05-02 41 views
2

我使用TextViewandroid:ellipsize屬性與android:maxLines一起使文本適合最多3行。Ellipsize TextView在單詞末尾

問題是,有時文本被切斷在詞的中間。我只想在文字結尾處省略文字。例如:

Android是真棒

現在看起來是這樣的:

Android是敬畏...

但我想它看起來像這樣:

Android是...

此外,用戶可以動態地在這個TextView改變textSize,所以它是非常難預測哪些單詞將是最後一個。

有沒有辦法在完整的單詞結尾處省略橢圓?如果系統不允許這樣做,是否有任何庫可以提供這種功能,或者唯一的可能性是編寫我自己的類來執行此操作?

+1

1.讓你的文字大小; 2.獲取您的textview大小; 3.使用數學; 4.對您的文本進行適當更改 –

+0

@MovieovBoris您尚未回答我的問題。我對如何讓自己的課程實現所需的功能有了一個想法,但我正在問一些現有的解決方案,以便節省時間。 – fragon

+0

這不是試圖回答你的問題,而是評論描述你的問題的一種方法。 –

回答

-1

您必須爲文本視圖指定ellipsize爲'end'。然後設置文本之後,添加globallayout監聽到的TextView並將其文本更改如下:

TextView articleTitle = (TextView) v.findViewById(R.id.articleTitle); 
     articleTitle.setText("This is a big big text"); 
     doEllipse(articleTitle); 




public void doEllipse(final TextView tv) { 
    tv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 
      tv.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      String text = tv.getLayout().getText().toString(); 
      int text1Index = text.indexOf("…"); 
      if (text1Index > 0) { 
       text = text.substring(0, text.lastIndexOf(" ")) + "..."; 
       tv.setText(text); 
      }  
     } 
    }); 

}