Как получить текст с многоточием в 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));
        }
    });