Textview显示部分文本

问题描述:

我有一个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" 
      /> 

但在应用程序中,文本显示两行,即使包含签名行。消息类似于:“消息文本”+“\ n签名”,但消息可以在1,2,3行上,具体取决于消息长度。

+0

为什么你需要知道文本的长度设置为不?它可能针对不同屏幕尺寸有所不同,除非你定义TextView的一个固定的宽度。 – Adinia 2011-02-01 07:38:22

+0

我的问题是,我不知道如何在最后一个可见单词的末尾添加3个点。android:elli psize =“end”和android:ellipsize =“marquee”没有帮助....所以我认为我不会将所有文本添加到textview,但只有符合textview – 2011-02-01 07:55:39

+0

的文本才能发布代码您现在使用的TextView?也许还有其他一些属性会阻止椭圆化工作。 – Adinia 2011-02-01 07:58:59

在XML中,使用TextView属性android:ellipsize="marquee"

你的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"/> 

编辑:我试过下面的代码,改编自你:

<?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在line2之后我必须添加3个点,因为消息不适合 – 2011-02-01 07:52:56

+0

您尝试使用此属性吗?它只是截断第二行后面的文本,并为你放置三个点,我从我的代码中剪切并粘贴它。 – Adinia 2011-02-01 07:56:47

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); 

使用android:ellipsize="end",而不是“大帐篷”这为我做。

Gabi,

我也有同样的问题。要在一个TextView使ellipsize与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线... :(祝你好运

如果从代码中设置的文字,比你必须再次设置的选项!

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

它工作对我来说,当我在代码中的XML布局

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