2012-06-26 2 views
40

, когда я использую TextView с singleLine="true" и ellipsize="end" (мой топ TextView), он работает хорошоУстановка Ellipsize на TextView уменьшает линии, показанные одной (вместо только ellipsizing последний)

но в другом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 линиями и No-Ellipsize. Вот изображение:

enter image description here

Но я хочу ellipsize, так что я использует followin код: 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 с ellipsize

кто может мне помочь.?

+1

Я думаю, что вы работаете в [известная проблема] (HTTP: // StackOverflow. com/questions/2160619/android-ellipsize-multiline-textview) – tiguchi

+0

Я точно не знаю, почему это происходит. Но если вы хотите пойти с эллипсисом, тогда вы не сохраните свое свойство, а не конец. –

ответ

44

Это, безусловно, самое простое решение, которое я нашел и использую в настоящее время при развертывании. Дайте мне знать, если вам нужна какая-либо помощь!

О, и не забудьте удалить тег 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); 
     } 
    } 
}); 
+0

Спасибо, яар ... Это сработало. Большое спасибо. –

+0

Это хорошее решение, но есть более простой и понятный способ, см. Мой ответ. – Flawyte

+1

Спасибо, это сработало для меня, но было бы намного легче, если бы maxLines и эллипсис работали вместе. – draksia

-2

Попробуйте

tv.setSingleLine(false); 
tv.setEllipsize(TextUtils.TruncateAt.END); 
int n = 3; // the exact number of lines you want to display 
tv.setLines(n); 

см Programmatically create TextView with ellipsis

+0

У вас это проверили, это не работает для меня. – vrs

+0

См. Ответ Вишва Патель, он отлично работает. –

+0

См. Редактирование. Я пропустил, чтобы добавить две линии. tv.setSingleLine (ложь); и tv.setLines (n); –

-1

Просто используйте ellipsize в сочетании с scrollHorizontally="true". Простой & чистый.

Он отлично работал для меня.

+1

Это просто делает его единственной строкой, которую вы уже можете сделать с помощью свойства 'singleLine' –

+0

@AliGangji. Я не думаю, что это было так, когда я опубликовал. Полезно знать – Flawyte

+0

Для меня это решение работает (Android 5.0) даже для многострочного TextView. Но количество строк меняется между TextViews (от 1 до maxLines). – CoolMind

16

Только что установленный 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" /> 
+0

За исключением того, что он не работает с версиями Honeycomb. То, что я получаю, это textview размером до 2 строк, но вы получаете вершины букв на третьей строке и не многоточие. –

+0

Где-то рядом с KitKat или Lollipop это начало работать правильно (я забыл точный уровень API). До этого он все еще ограничивает правильное 'maxLines', но не включает также многоточие. Тем не менее, я думаю, что в эти дни было бы разумно жить с этим, поскольку это гораздо более простая альтернатива ручным манипуляциям с строкой в ​​коде. –

2

Используйте следующие чтобы получить многострочный TextView с многоточием на последней строке:

android:maxLines="4" 
android:ellipsize="end" 
android:singleLine="false" 

Заменить 4 с количеством строк, которые вы хотите. Надеюсь, это поможет!

0

Я попробовал его с MaxLines и ellipsize на Android 7 & 8.

android:maxLines="3" 
android:ellipsize="end" 

Предварительный просмотр показывает 2 линии и на третьей линии "...".

Но это, кажется, ошибка в предварительном просмотре.

На устройстве он просто работает отлично, 3 строки с текстом, в конце третьей строки «...»

 Смежные вопросы

  • Нет связанных вопросов^_^