2015-05-02 3 views
2

Я использую атрибут TextViewandroid:ellipsize вместе с android:maxLines, чтобы текст вписывался в максимальное количество трех строк.Ellipsize TextView в конце слова

Проблема в том, что иногда текст вырезается посредине слова. Я хотел бы эллипсизировать текст только в конце слова. Например:

Android является удивительным

Теперь это выглядит следующим образом:

Android является благоговение ...

Но я хотел бы, чтобы это выглядело, как это :

Android является ...

Кроме того, пользователь может динамически изменять textSize в этом TextView, поэтому довольно трудно предсказать, какое слово будет последним.

Есть ли способ эллипсирования ТОЛЬКО в конце полного слова? Если система не позволяет этого, есть ли библиотека, которая даст такую ​​функциональность или единственная возможность написать мой собственный класс, который делает это?

+1

1. получить размер текста; 2. получить размер вашего текста; 3. использовать математику; 4. внесите соответствующие изменения в свой текст –

+0

@MocialovBoris Вы не ответили на мой вопрос. У меня есть идея о том, как сделать собственный класс, реализующий желаемые функции, но я спрашиваю о некоторых существующих решениях, которые я мог бы использовать, чтобы сэкономить время. – fragon

+0

Это не попытка ответить на ваш вопрос, а комментарий, описывающий один подход к вашей проблеме. –

ответ

-1

Необходимо указать эллипсис в «конец» для текстового просмотра. Затем после установки текста, добавьте 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); 
      }  
     } 
    }); 

} 
Смежные вопросы