2011-02-01 1 views
17

У меня есть TextView, в котором я должен загрузить сообщение. TextView имеет максимум 2 строки (android:lines="2"). Сообщение может содержать символ «\ n».Textview показать частичный текст

Как загрузить сообщение в этом TextView, чтобы слова были обернуты, и если в этих двух строках сообщение не подходит, в конце последнего видимого слова я должен добавить три точки (...)? Как определить длину текста, который подходит для этого TextView?

Мой код TextView является

<TextView 
      a:id="@+id/tv_message" 
      a:gravity="top" 
      a:layout_width="wrap_content" 
      a:layout_height="wrap_content" 
      a:layout_alignParentTop="true" 
      a:layout_toRightOf="@id/iv_icon" 
      a:layout_marginLeft="2dp" 
      a:layout_marginTop="4dp" 
      a:paddingRight="7dp" 
      a:paddingBottom="5dp" 
      a:textSize="12sp" 
      a:typeface="sans" 
      a:ellipsize="marquee" 
      a:lines="2" 
      a:maxLines="2" 
      a:textColor="@android:color/black" 
      /> 

Но в применении, на двух строках появляется текст, даже если есть строка, содержащая подпись. Сообщение выглядит так: «текст сообщения» + «\ nSignature», но сообщение может быть на 1,2,3 строки, в зависимости от длины сообщения.

+0

Почему вы должны знать длину текста? Это может варьироваться для разных размеров экрана, если вы не определить фиксированную ширину для TextView. – Adinia

+0

Моя проблема в том, что я не знаю, как добавить 3 точки в конце последнего видимого слова. Android: elli psize = "end" и android: ellipsize = "marquee" не помогает .... так что я думал, что я не добавляю весь текст в textview, но только текст, который подходит текстовому окну –

+0

, можете опубликовать код для TextView, который вы используете сейчас? возможно, есть другие свойства, которые препятствуют работе эллипсиса. – Adinia

ответ

24

В XML используется свойство android:ellipsize="marquee" для TextView.

Ваш TextView может быть определен как:

<TextView 
android:id="@+id/text" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:maxLines="2" 
android:lines="2" 
android:ellipsize="marquee"/> 

Edit: Я попытался следующий код, адаптированный от вашего:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rlt_news" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/cell_background" 
    android:padding="5dip" > 

    <TextView 
     android:id="@+id/tv_title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:paddingLeft="5dip" 
     android:text="Name" 
     android:textStyle="bold" /> 

    <ImageView 
     android:id="@+id/rss_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/tv_title" 
     android:layout_marginLeft="2dip" 
     android:adjustViewBounds="true" 
     android:maxHeight="100dip" 
     android:maxWidth="100dip" 
     android:src="@drawable/rss_cell_icon" 
     android:visibility="visible" /> 

    <TextView 
     android:id="@+id/tv_description" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="2dp" 
     android:layout_marginTop="4dp" 
     android:layout_toRightOf="@id/rss_icon" 
     android:ellipsize="marquee" 
     android:gravity="top" 
     android:lines="2" 
     android:maxLines="2" 
     android:paddingBottom="5dp" 
     android:paddingRight="7dp" 
     android:text="Description of the news, just the short paragraph, \nSignature, to see how it works if there are more than two lines" 
     android:textColor="@android:color/black" 
     android:textSize="12sp" 
     android:typeface="sans" /> 

</RelativeLayout> 

А вот выход:
enter image description here

+0

это не помогает ... Если у меня есть сообщение: line1 \ nline2 \ nline3 после строки2, я должен добавить 3 точки, потому что сообщение не подходит –

+0

Вы пытались использовать этот атрибут?Он просто обрезает текст после второй строки и помещает три точки для вас, я вырезаю и вставляю их из своего кода. – Adinia

+0

Я прикрепил свой код для xml –

0
String s = "line1 \nline2 \nline3"; 
    String [] lines = s.split("\n"); 
    String twolines; 
    if (lines.length > 2) { 
     twolines = lines[0] + "\n" + lines[1] + "..."; 
    } else { 
     twolines = s; 
    } 

Это должно дать вам желаемый результат, просто используйте

((TextView)findViewById(R.id.text)).setText(twolines); 
+0

это не помогает ... Если у меня есть сообщение: line1 \ nline2 \ nline3 после строки2, я должен добавить 3 точки, потому что сообщение не соответствует –

+0

, но первая строка сообщения может быть достаточно длинной, чтобы поместиться на 3 строки textview, так что это не помогает –

12

android:ellipsize="end" Используйте вместо «бегущей строки», который сделал это для меня.

+0

это работает и для меня .. Спасибо @Ashwin –

8

Габи,

Я также с той же проблемой. Чтобы включить ellipsize на TextView с 2 строками я использую следующие параметры:

android:maxLines="2" // You already got this one 
android:ellipsize="end" // also this one 
android:singleLine="false" // This is the command that solves your problem. 

К сожалению, я получил новый сценарий для моего приложения. Я должен использовать 3 линии с ellipsize и эта конфигурация работает только для 2-х линий ... :(Удачи

+0

@Gasper это сработало для меня. Я подаю заявку на 1 строку. Огромное спасибо. – praveenb

4

Если установить текст из кода, чем вы должны установить параметры еще раз!

textView.setText(content); 
textView.setEllipsize(TruncateAt.END); 
textView.setLines(5); 
textView.setMaxLines(5); 
2

It работает для меня, когда я поставил его в коде не в макете XML

holder.txtDescription.setText(text); 
holder.txtDescription.setMaxLines(3); 
holder.txtDescription.setEllipsize(TruncateAt.END);