Установка Ellipsize в TextView уменьшает линии, показанные одним (вместо того, чтобы только эллипсизация последней)
когда я использую TextView
с singleLine="true"
и ellipsize="end"
(мой верхний TextView),
он хорошо работает
, но в другом TextView
, имеющем более 1 строки (в моем случае 3 строки в нижней части TextView
),
lines="3" and maxLines="3" and ellipsize="end",
работает неправильно.
Когда я НЕ помещаю ellipsize="end"
в tvDesc, он показывает 3 строки, что в порядке.
Вот код: XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imgv"
android:layout_width="65dp"
android:layout_height="80dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/img1"
android:scaleType="fitXY" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/imgv"
android:background="@android:color/white"
android:textColor="@android:color/black"
android:text="Title testing line number and ellipsize at end"
android:maxLines="1"
android:singleLine="true"
android:ellipsize="end" <--- WORKS WELL
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/tvDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tvTitle"
android:layout_toRightOf="@+id/imgv"
android:layout_alignBottom="@+id/imgv"
android:layout_alignParentRight="true"
android:textSize="14dp"
android:lines="3"
android:maxLines="3"
<---------- WITHOUT ellipsize
android:text="I wanna this textview of having 3 lines and ellipsize at END and at this time I am Testing for it. This TextView shows 3 lines WITHOUT ellipsize property, but shows only 2 Lines when ELLIPSIZE property is setted"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
Выше кода показывает TextView tvDesc с 3 строками и без эллипса. Вот изображение:
![enter image description here]()
Но я хочу эллипсизировать, поэтому я использую следующий код: XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imgv"
android:layout_width="65dp"
android:layout_height="80dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/img1"
android:scaleType="fitXY" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/imgv"
android:background="@android:color/white"
android:textColor="@android:color/black"
android:text="Title testing line number and ellipsize at end"
android:maxLines="1"
android:singleLine="true"
android:ellipsize="end"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/tvDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tvTitle"
android:layout_toRightOf="@+id/imgv"
android:layout_alignBottom="@+id/imgv"
android:layout_alignParentRight="true"
android:textSize="14dp"
android:lines="3"
android:maxLines="3"
android:ellipsize="end" <------ WITH ELLIPSIZE
android:text="I wanna this textview of having 3 lines and ellipsize at END and at this time I am Testing for it. This TextView shows 3 lines WITHOUT ellipsize property, but shows only 2 Lines when ELLIPSIZE property is setted"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
Показывает TextView tvDesc всего 2 строки и Ellipsize,
который не является соответствующим образом дезактивированным пользовательским интерфейсом, так как Followin:
![enter image description here]()
Я хочу 3 строки в TextView tvDesc с эллипсисом
МОЖЕТ ЛИ ПОМОЧЬ МЕНЯ.?
Ответы
Ответ 1
Это, безусловно, самое простое решение, которое я нашел и использую в настоящее время при развертывании. Дайте мне знать, если вам нужна какая-либо помощь!
О, и не забудьте удалить тег android:ellipsize
в вашем XML, так как вы будете использовать нижний код для автоматического эллипсирования в конце 3 строк.
TextView snippet;
snippet.setText("loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor ")
ViewTreeObserver vto = this.snippet.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = snippet.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
if (snippet.getLineCount() > 3) {
int lineEndIndex = snippet.getLayout().getLineEnd(2);
String text = snippet.getText().subSequence(0, lineEndIndex - 3) + "...";
snippet.setText(text);
}
}
});
Ответ 2
Просто установите android:maxLines
и android:ellipsize
.
<TextView
android:id="@+id/tv_dua"
android:ellipsize="end"
android:maxLines="3"
android:text="long text"
android:textAppearance="?android:attr/textAppearanceMedium" />
Ответ 3
Используйте следующую команду, чтобы получить многострочный текст с эллипсисом в последней строке:
android:maxLines="4"
android:ellipsize="end"
android:singleLine="false"
Замените 4 количеством нужных строк.
Надеюсь, это поможет!
Ответ 4
Я пробовал его с maxLines и эллипсисом на Android 7 и 8.
android:maxLines="3"
android:ellipsize="end"
Предварительный просмотр показывает 2 строки и в третьей строке "...".
Но это кажется ошибкой в предварительном просмотре.
На устройстве он работает нормально, 3 строки с текстом, в конце третьей строки "..."
Ответ 5
Просто используйте эллипсис в сочетании с scrollHorizontally="true"
. Простой и чистый.
Он отлично работал у меня.
Ответ 6
Попробуйте
tv.setSingleLine(false);
tv.setEllipsize(TextUtils.TruncateAt.END);
int n = 3; // the exact number of lines you want to display
tv.setLines(n);
ссылаться Программно создавать TextView с эллипсисом