Нет способа достичь этого, просто указав атрибуты в файле ресурсов макета.
Если вы посмотрите на метод setEllipsize()
в TextView
, вы увидите, что он говорит:
Приводит к тому, что слова в тексте, длина которых превышает ширину представления, будут иметь эллиптический размер вместо разбитых в середине. Вы также можете установить setSingleLine () или setHorizontallyScrolling (логическое значение), чтобы ограничить текст одной строкой. Используйте ноль, чтобы отключить многоточие. Если setMaxLines (int) использовалось для установки двух или более строк, поддерживаются только TextUtils.TruncateAt.END и TextUtils.TruncateAt.MARQUEE (другие типы многоточия не будут ничего делать).
Из этой документации вы можете видеть, что многоточие в TextView
на самом деле сильно зависит от двух факторов: ширина просмотра и количество строк .
Напоминаю, что многоточие может не отображаться для TextView
, если оно не знает максимального числа строк, которое может иметь ваш TextView
.
Так что для вашего предполагаемого поведения это невозможно, потому что вместо этого вы зависите от высоты просмотра. Вы хотите использовать определенную высоту, а затем TextView рассчитать количество линий, которые могут быть показаны в пределах этой высоты. Наконец, если количество необходимых строк больше указанного количества, вы хотите показать эллипсы.
Это ... невозможно при кодировании эллипсов в TextView
. Это просто не было предназначено для этого.
Поэтому, если вы хотите такое поведение, вам нужно:
Создать пользовательский TextView
для вашей конкретной реализации эллипсов
Вручную вычислите количество видимых линий, затем используйте setMaxLines()
для этого TextView
Для второго варианта вы можете рассчитать это, используя TextView
методы getHeight()
и getLineHeight()
.
Например:
textview = (TextView) findViewById(R.id.exampleTextView);
textview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
final int maxLines = textview.getHeight() / textview.getLineHeight();
textview.setMaxLines(maxLines);
}
});
В моем примере я делаю это внутри ViewTreeObserver
, чтобы getHeight()
не вызывал размер 0.
Второй вариант должен иметь возможность получить желаемое поведение, но если вы хотите это для каждого TextView
, вам следует рассмотреть возможность создания пользовательского TextView
.