Android、TextViewの幅を制限する方法(およびテキストの最後に3つのドットを追加する方法)


317

私が持っているTextView、私はそれの文字を制限したいということ。実際、これは可能ですが、探しているのは、文字列の最後に3つのドット(...)を追加する方法です。これはテキストが続いていることを示しています。これは私のXMLですが、テキストを制限するもののドットはありません。

<TextView 
        android:id                      = "@+id/tvFixture"
        android:layout_width            = "wrap_content"
        android:layout_height           = "wrap_content"
        android:layout_toLeftOf         = "@id/ivFixture_Guest"
        android:text                    = "@string/test_06"
        android:lines                   = "1"
        android:ems                     = "3"
        android:gravity                 = "right"
        style                           = "@style/simpletopic.black" 
        android:ellipsize="end"/>

回答:


693

非推奨:

android:singleLine="true"Textviewにプロパティをもう1つ追加します

更新しました:

android:ellipsize="end" 
android:maxLines="1"

3
私がこれを試みたとき、間違いなくsingleLineが必要です。それは非難されたと言いますが。
EGHDK 2013

41
android:singleLine = "true"は非推奨であり、悪影響があります。代わりにandroid:ellipsize = "end"とmaxLine = "1"を使用してください
Hamidreza Hosseinkhani

1
使用の「悪い副作用」とは何singleLineですか?参照:xml属性singleLineはAndroidで非推奨になっているかどうか
Suragch 2017

1
ところで、アンドロイド:あなたは:)したい場合MAXLINESは1よりも大きくすることができる
トゥーレホルダー

1
このメッセージを受け取った人はいますか "W / StaticLayout:maxLineHeightを-1にしないでください。maxLines:1 lineCount:1">?
COLD ICE

157

以下はTextView、aを1行に強制するためのさまざまなオプション(3つのドットがある場合とない場合)をいじって学んだことです。

ここに画像の説明を入力してください

android:maxLines = "1"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:text="one two three four five six seven eight nine ten" />

これはテキストを強制的に1行にします。追加のテキストは非表示になります。

関連:

ellipsize = "end"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:ellipsize="end"
    android:text="one two three four five six seven eight nine ten" />

これは、適合しないテキストを切り取りますが、省略記号(3つのドット)を追加することによってテキストが切り捨てられていることをユーザーに知らせます。

関連:

ellipsize = "marquee"

<TextView
    android:id="@+id/MarqueeText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:text="one two three four five six seven eight nine ten" />

これにより、TextView全体でテキストが自動的にスクロールします。時にはそれをコードで設定する必要があることに注意してください:

textView.setSelected(true);

おそらくandroid:maxLines="1"android:singleLine="true"基本的には同じことを行うはずですが、singleLineは明らかに非推奨となっているので、使用しない方がいいですが、取り出すと、マーキーはスクロールしなくなります。撮影maxLinesアウトしているが、それには影響しません。

関連:

scrollHorizo​​ntallyを使用したHorizo​​ntalScrollView

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/horizontalScrollView">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:scrollHorizontally="true"
        android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>

これにより、ユーザーは手動でスクロールして、テキストの行全体を表示できます。


しかし、これはすべての単語の終わりにある省略記号です。very_long_word_without_whitespace ...の途中に...を追加する方法はありますか?
トビアスライヒ

@TobiasReich、私はそれを達成するための組み込みの方法を知りません。Paint.measureTextを使用して独自に作成できます。
Suragch 2017年

app:layout_constrainedWidth = "true"も必要になる場合があります
Dan Crisan

80

レイアウトファイルでこのTextViewのプロパティを試してください。

android:ellipsize="end"
android:maxLines="1"

31

幅を1行に制限し、文字ごとに制限したくないと思いますか?singleLineは非推奨であるため、以下を一緒に使用してみてください。

android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"

13

例えば。あなたは使うことができます

android:maxLength="13"

これはtexviewの長さを13に制限しますが、問題は3つのドット(...)を追加しようとすると、テキストビューの長さの一部になるため表示されません。

     String userName;
     if (data.length() >= 13) {
            userName = data.substring(0, 13)+ "...";

     } else {

            userName = data;

    }
        textView.setText(userName);

これとは別に、使用する必要があります

 android:maxLines="1"

2
「...」ではなく「\ u2026」を使用することをお勧めします
Zharro

これはほんの一例です。Strings.xmlに文字列を配置する場合は、間違いなくユニコードを使用します。ここに入れたい具体的な理由は?
Nayanesh Gupte 2015

2
いいえ。私は最近、この文字がUnicodeに存在することを個人的に知り、この知識を共有することにしました;)
Zharro

6

使用する

  • android:singleLine="true"
  • android:maxLines="1"
  • app:layout_constrainedWidth="true"

それは私のTextViewフルルックです:

    <TextView
    android:id="@+id/message_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="5dp"
    android:maxLines="1"
    android:singleLine="true"
    android:text="NAME PLACEHOLDER MORE Text"
    android:textColor="@android:color/black"
    android:textSize="16sp"

    android:textStyle="bold"
    app:layout_constrainedWidth="true"
    app:layout_constraintEnd_toStartOf="@id/message_check_sign"
    app:layout_constraintHorizontal_bias="0"
    app:layout_constraintStart_toEndOf="@id/img_chat_contact"
    app:layout_constraintTop_toTopOf="@id/img_chat_contact" />

<code> TextView </ code>の画像


5

Horizo​​nal Recyclerviewを使用しています。
1)ここでCardViewを使用すると、TextViewは垂直に歪む

android:ellipsize="end"
android:maxLines="1"

太字のTextViews Wyman Group、Jaskolski ...を確認してください。 ここに画像の説明を入力してください

2)しかし、ellipsizeとともにsingleLineを使用した場合-

android:ellipsize="end"
android:singleLine="true"

太字のTextViews Wyman Group、Jaskolski ...を確認してください。 ここに画像の説明を入力してください

2番目の解決策が適切に機能しました(singleLineを使用)。また、OSバージョン4.1以降(8.0まで)でテストしましたが、クラッシュすることなく正常に動作しています。


4

コード:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);

xml:

android:maxLines = "5"

例えば

マタイ13章では、弟子たちはイエスに、なぜたとえ話で群衆に話しかけたのか尋ねました。「天国の神秘を知ることはあなたに与えられましたが、彼らには与えられていません。

出力:マタイ13章で、弟子たちはイエスに、なぜたとえ話で群衆に話しかけたのか尋ねました。彼は答えました、「それはあなたに知っているように与えられました...


4

を使用して目的の結果を得た

android:maxLines="2"
android:minLines="2"
android:ellipsize="end"

トリックは、maxLinesとminLinesを同じ値に設定することです。そして、android:lines = "2"だけではなく、トリックを実行しません。また、廃止された属性を回避しています。


4

テキストビューのレイアウトに次の行を追加する必要があります

android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"

これがうまくいくことを願っています。


3

テキストビューの文字数を制限し、テキストの後に(...)を追加できます。5文字だけを表示する必要があり、その後に(...)を表示する必要があるとします。次のようにします。

String YourString = "abcdefghijk";

if(YourString.length()>5){

YourString  =  YourString.substring(0,4)+"...";

your_text_view.setText(YourString);
}else{

 your_text_view.setText(YourString); //Dont do any change

}

少しハック^ _ ^。それは良い解決策ではありませんが。しかし、私のために働いた回避策:D

編集: 私はあなたの限られたNoに従って、より少ないキャラクターのチェックを追加しました。文字の。



3

使用するためにアンドロイド:ellipsize属性、あなたが制限する必要があり、レイアウトの幅のTextViewを、その結果、テキスト TextViewの観点から、範囲外であるが。

したがって、android:layout_width属性がここで重要な役割を果たし、それに応じて設定します。

1つのは次のとおりです。

<TextView        
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:text="This is a very long text to be displayed"
    android:textSize="12sp"
    android:maxLines="1"            
     />

さて、ここでの場合は、テキストのandroid:テキストは=「これが表示されるまでに非常に長いテキストです」とのTextViewからビューの外に出るlayout_width =「120dp」:アンドロイドアンドロイド:ellipsize =「終了」切り捨てられますテキストをし、その後に...(3ドット)を置きます。つまり、これは非常に長い... TextViewに表示されます。




2

@AzharShaikhのアプローチはうまく機能します。

android:ellipsize="end"
android:maxLines="1"

しかし、TextViewが単語単位で切り捨てられる(デフォルトでは)という問題に気付きました。次のようなテキストがあるかどうかを示します。

long_line_without_any_space_abcdefghをテストする

TextViewが表示されます。

テスト...

そして、私はこの問題を処理するための解決策を見つけました、スペースをユニコードの改行しないスペース文字で置き換えます、それはTextViewを単語の代わりに文字で折り返します:

yourString.replace(" ", "\u00A0");

結果:

テストlong_line_without_any_space_abc ...


2
        <TextView
            android:id="@+id/product_description"
            android:layout_width="165dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:paddingLeft="12dp"
            android:paddingRight="12dp"
            android:text="Pack of 4 summer printed pajama"
            android:textColor="#d2131c"
            android:textSize="12sp"
            android:maxLines="2"
            android:ellipsize="end"/>


0

あなたはそれを行うことができますxml

<TextView 
    android:id="@+id/textview"
    android:maxLines="1" // or any number of lines you want
    android:ellipsize="end"
    />

どのように私はプロパティで3 Dots@エンドを置くことができmaxLength="35"ますか?
Sagar

-1

あなたはただ変わる...

android:layout_width="wrap_content"

以下の行を使用

android:layout_width="match_parent"

……

   <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="10dp"
       android:layout_marginTop="10dp"
       android:layout_toRightOf="@+id/visitBox"
       android:orientation="vertical" >

             <TextView
                  android:id="@+id/txvrequestTitle"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:singleLine="true"
                  android:text="Abcdefghighiklmnon"
                  android:textAppearance="? 
                  android:attr/textAppearanceLarge"
                  android:textColor="@color/orange_color" />

   </LinearLayout>

singleLineは非推奨
Nick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.