Как я могу узнать, было ли мое текстовое представление эллиптическим? - PullRequest
67 голосов
/ 24 октября 2010

У меня есть многострочный TextView с установленным android:ellipsize="end". Однако я хотел бы знать, если строка, которую я помещаю туда, на самом деле слишком длинная (чтобы я мог убедиться, что полная строка показана в другом месте на странице).

Я мог бы использовать TextView.length() и найти примерную длину строки, но так как она состоит из нескольких строк, TextView обрабатывает, когда переносить, так что это не всегда работает.

Есть идеи?

Ответы [ 11 ]

0 голосов
/ 14 февраля 2015

Использование getEllipsisCount не будет работать с текстом, в котором есть пустые строки.Я использовал следующий код, чтобы он работал:

message.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {

            if(m.isEllipsized == -1) {
                Layout l = message.getLayout();
                if (message.getLineCount() > 5) {
                    m.isEllipsized = 1;
                    message.setMaxLines(5);
                    return false;
                } else {
                    m.isEllipsized = 0;
                }
            }
            return true;
        }
    });

Не устанавливайте maxLineCount в своем XML.Затем вы можете проверить lineCount в вашем коде и, если оно больше определенного числа, вы можете вернуть false, чтобы отменить рисование TextView и установить количество строк, а также флаг, чтобы сохранить ли текствид слишком длинный или нет.Текстовое представление снова будет отображаться с правильным количеством строк, и вы узнаете, имеет ли оно эллиптическое значение или нет с флагом.

Затем вы можете использовать флаг isEllipsized, чтобы делать все, что вам нужно.

...