2011-02-01 16 views
17

メッセージをロードする必要があるTextViewがあります。 TextViewは最大2行(android:lines="2")です。メッセージには '\ n'文字を含めることができます。Textview部分テキストを表示

単語が折り返され、その2行のメッセージが合わない場合、最後に表示される単語の最後に3つのドット(...)を追加する必要があります。 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" 
      /> 

ですが、アプリケーションでは、テキストが署名を含む行があっても、2行に表示されます。メッセージは "message text" + "\ nSignature"のようですが、メッセージの長さに応じて1,2,3行になります。

+0

テキストの長さを知る必要があるのはなぜですか?TextViewの固定幅を定義しない限り、画面のサイズによって異なる場合があります。 – Adinia

+0

私の問題は、最後に目に見える単語の最後に3ドットを追加する方法がわからないことです。アンドロイド:elli psize = "end" android:ellipsize = "marquee"は役に立たないので、テキストビューにすべてのテキストを追加するのではなく、テキストビューに適合するテキストのみを追加します。 –

+0

今使っているTextView?おそらく、省略されたものが動作するのを妨げる他の特性がある。 – Adinia

答えて

24

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

編集:私は、次のコードを試してみましたあなたから採用しました:
enter image description here

<?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> 

そして、ここでは、出力されます

+0

それは助けになりません...メッセージがある場合:line1 \ nline2 \ nline3 line2の後に私は3つのドットを追加する必要がありますので、適合しませんでした –

+0

この属性を使用しようとしましたか?2行目の後にテキストを切り捨て、3つのドットを置いて、コードから切り取って貼り付けます。 – 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 line2の後に私はメッセージが –

+0

に合わないので3ドットを追加する必要がありますが、メッセージの最初の行は3行に収まるのに十分な長さですtextview、これは役に立たないので、これは私にとっても役に立ちます –

12

使用android:ellipsize="end"を使用し、あなたの望ましい結果を与える必要があります。

+0

ありがとう@Ashwin –

8

Gabi、

私も同じ問題を抱えていました。私は、次のパラメータを使用して2線でのTextViewにellipsizeを有効にするには:

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. 

残念ながら、私は私のアプリのための新しいシナリオを得ました。私はellipsizeとの3行を使用する必要があり、あなたがコードからテキストを設定した場合は、もう一度オプションを設定する必要がありますよりも、この構成では唯一、2行... :(幸運

+0

@Gasperそれは私のために働いた。私は1行申し込みます。どうもありがとうございます。 – praveenb

4

のために働く!

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

それをXMLレイアウトではないコードで設定したときに動作します

holder.txtDescription.setText(text); 
holder.txtDescription.setMaxLines(3); 
holder.txtDescription.setEllipsize(TruncateAt.END); 
関連する問題