Как получить текст с многоточием в TextView
как получить текст, который был усечен Android в многоточие?
у меня есть textview:
<TextView
android:layout_width="120dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:text="Um longo texto aqui de exemplo" />
на устройстве этот TextView отображается следующим образом:
"Um longo texto a..."
как я могу получить остальную часть текста?
Я ищу что-то вроде getRestOfTruncate()
который вернет "qui de exemplo".
2 ответов
String text = (String) textView.getText().subSequence(textView.getLayout().getEllipsisStart(0), textView.getText().length());
использование textView.getLayout().getEllipsisStart (0) работает только если android:singleLine="true"
вот решение, которое будет работать, если android: maxLines установлен:
public static String getEllipsisText(TextView textView) {
// test that we have a textview and it has text
if (textView==null || TextUtils.isEmpty(textView.getText())) return null;
Layout l = textView.getLayout();
if (l!=null) {
// find the last visible position
int end = l.getLineEnd(textView.getMaxLines()-1);
// get only the text after that position
return textView.getText().toString().substring(end);
}
return null;
}
помните: это работает после того, как представление уже видно.
использование:
textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
textView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
Log.i("test" ,"EllipsisText="+getEllipsisText(textView));
}
});