Androidの複数行TextView?


154

私は以下のようにしました xml

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor, Gulistan-e-Johar, Karachi" >
    </TextView> 
</TableRow>

で動作していません。multiline使用していTableLayoutます...

ここで私がしている間違いは何ですか?

回答:


197

入力するテキストTextViewが短い場合、自動的に4行に拡張されません。あなたがしたい場合TextView、常に関係なく内のテキストの長さの4つのラインを持って、設定しandroid:linesた属性を:

<TextView
    android:id="@+id/address1"
    android:gravity="left"
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:maxLines="4"
    android:lines="4"
    android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView>

TableRowでこれを行うことができます。以下のコードを参照してください

<TableRow >
        <TextView
            android:id="@+id/tv_description_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:padding="8dp"
            android:text="@string/rating_review"
            android:textColor="@color/black"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tv_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:maxLines="4"`enter code here`
            android:padding="8dp"
            android:text="The food test was very good."
            android:textColor="@color/black"
            android:textColorHint="@color/hint_text_color" />
    </TableRow>

21
OP は、「TextViewに含まれるテキストの長さに関係なく、常に4行にしたい」とは考えていませんでした
tar

7
この答えは私にとってうまくいきました。しかし、maxlinesとlinesではなく、maxlinesとminlinesで最高の結果が得られ、lineを使用しませんでした。minlinesを1に、maxlinesを最大のデータよりも大きく設定しました。そのようにして、データをコンパクトに表示するために1〜N行を取得します。
R Earle Harris

1
@REarleHarris:私も同じ解決策を試しましたが、問題はmaxLinesカウントを取得していないことです。すべてのデータはminLinesカウントで表示されます。何を試すことができますか?xmlでカスタムテキストビューを使用しています
Sagar Devanga '22 / 08/22

119

あなたが使用するなら、私はそれを追加すると思いました:

android:inputType="textMultiLine"

その後、ビューはクリック可能でなくなります。スライドドロワーメニューで複数行のテキストビューを取得しようとしていましたが、クリックに応答する必要があることは明らかです。

でもandroid:singleLine="false"うまくいきました。


3
Android自体のlintエラーでは、この属性はEditTextでのみ使用し、TextViewでは使用しないことを示唆しているため、これは正確ではありません。
Jared

1
textMultilineを参照していますか?私はそれを使わないように言いました。単一行はTextViewsで結構です:developer.android.com/reference/android/widget/...
ライアン・

3
android:singleLineは非推奨になりました
HumbertoCastañeda'21

本気ですか?私は上記のコメントでリンクしているドキュメントでそれがresドキュメントでそのようにマークされているのを見たが、それは言及していない。奇妙なことに、彼らはTextViewページでそれについて言及していません。問題は、彼らが提案する回避策(複数行)が、OPに挿入したときにビューがクリック可能にならないことです。developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android:singleLine = "false"はデフォルト値であるため非推奨
Ashraf Alshahawy

28

私はどちらの答えも好きではありません。inputTypeを設定するだけで、TextViewはそのコンテンツに適応します

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"/>

Nexus One(2.3)およびNexus 4(4.4)でテスト済み


52
android:inputType = "textMultiLine"はTextViewではなくEditText用であり、これを実行しようとすると警告が表示されます
bhaskarc

2
警告を聞く必要があります。@Ryansソリューションを使用します。
m02ph3u5 2016年

15

テキスト内に「\ n」を置くだけです...追加の属性は必要ありません:)

          <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Pigeon\nControl\nServices"
            android:id="@+id/textView5"
            android:layout_gravity="center"
            android:paddingLeft="12dp"/> 

6
このソリューションを使用してテキストを動的に設定することはできません
Sagar Devanga '22 / 08/22

@SagarDevangaテキストを動的に設定するとはどういう意味ですか?
16年

3
@SagarDevanga、私はちょうどチェックしました、動的および静的テキストはデフォルトで複数行で表示されます(使用する場合\n)ので、これは正しいソリューションです。いいえsingleLine=false、いいえlines=4など。
CoolMind

10

ScrollViewにテキストビューを追加するだけです

<ScrollView
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:layout_marginLeft="15dp"
           android:layout_marginRight="15dp"
           android:layout_marginTop="20dp"
           android:fillViewport="true">

           <TextView
               android:id="@+id/txtquestion"
               android:layout_width="fill_parent"
               android:layout_height="match_parent"
               android:background="@drawable/abs__dialog_full_holo_light"
               android:lines="20"
               android:scrollHorizontally="false"
               android:scrollbars="vertical"
               android:textSize="15sp" />

       </ScrollView>

5

テキストビューの行数を強制するソリューションは好きではありません。ここで提案されているソリューションを介して解決することをお勧めします。私が見るように、OPはテーブルでテキストビューを適切に見えるようにするのにも苦労してshrinkColumnsおり、必要なものを実現するために渡す正しいディレクティブです。


5

EditTextをクリックできないようにしたり、フォーカスできないようにしたり、スクロールバーを表示してEditTextのアンダーバーを削除したりして、EditTextを操作してみてください。
次に例を示します。

<EditText
android:id="@+id/my_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:inputType="textMultiLine"                   <!-- multiline -->
android:clickable="false"                         <!-- unclickable -->
android:focusable="false"                         <!-- unfocusable -->
android:scrollbars="vertical"     <!-- enable scrolling vertically -->
android:background="@android:color/transparent"   <!-- hide the underbar of EditText -->
/>  

お役に立てれば :)


3

最初に"\n"そのHtml同等のもので置き換え、"&lt;br&gt;" 次にHtml.fromHtml()文字列を呼び出します。以下の手順に従ってください:

String text= model.getMessageBody().toString().replace("\n", "&lt;br&gt;")
textView.setText(Html.fromHtml(Html.fromHtml(text).toString()))

これは完全に機能します。


2

私が学んだことは、次の行にブレーキをかけたい単語の間に「\ n」を追加することです。例えば...

<TextView
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:text="M-F 9am-5pm \n By Appointment Only" />

午後5時からByの間の\ nにより、次の行の開始と終了の場所をより細かく制御できました。


2

複数行のTextViewについて私が見つけた最良の答えは次のとおりです。

android:inputType="textMultiLine"

8
ではないandroid:inputTypeの属性<EditText>ではないため<TextView>
timtim

この属性をTextViewに追加すると、警告が表示されます。-属性付きのandroid:inputType = "textMultiLine"は、<TextView>では使用しないでください。実際、この属性はEditText用です。
Yhondri

2

android:inputType = "textMultiLine"を使用できます

  <TextView android:id="@+id/address1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:gravity="left"
    android:maxLines="4" 
    android:inputType="textMultiLine"
    android:text="Johar Mor, Gulistan-e-Johar, Karachi" />

1
これは警告として表示されます。TextViewでの使用を意図したものではありません
Stealth Rabbi

1
inputTypeはEditTextコンポーネントのみをサポートしています。
Chamin Wickramarathna

1

私が使用した:

TableLayout tablelayout = (TableLayout) view.findViewById(R.id.table);
tablelayout.setColumnShrinkable(1,true);

それは私のために働いた。1は列数です。


0
You can do this with TableRow, see below code

<TableRow >
    <TextView
        android:id="@+id/tv_description_heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:padding="8dp"
        android:text="@string/rating_review"
        android:textColor="@color/black"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4"`enter code here`
        android:padding="8dp"
        android:text="The food test was very good."
        android:textColor="@color/black"
        android:textColorHint="@color/hint_text_color" />
</TableRow>

0

最も簡単な方法

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor,\n Gulistan-e-Johar,\n Karachi" >
    </TextView> 
</TableRow>

\n新しい行を挿入したい場所で使用してください


0

キーはとのTextViewであるsingleline=false(はい推奨されませんが、仕事に持っている必要がありますされる)と組み合わせてlinesmaxlinesまたはminlines

<TextView
                android:id="@+id/txtBowlers"
                style="@style/Default_TextBox.Small"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:singleLine="false"
                android:maxLines="6"
                android:text="Bob\nSally\nJohn"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="@+id/txtTeamName"
                app:layout_constraintTop_toBottomOf="@+id/txtTeamName"/>

-1

レイアウトファイルに長い行を書き込む代わりに、文字列を宣言してみませんか。このためには、コード行をレイアウトファイル 'android:text = "@ string / text"'に宣言し、\\ app \ src \ main \ res \ values \ strings.xmlに移動してコード行を追加する必要があります'ここに複数行のテキストがあります'また、 '\ n'を使用して行を任意のポイントから分割します。そうしないと、行は自動的に調整されます。


-4

私にとっては、どの解決策も機能しませんでした。私はそれがこの質問の完全な答えではないことを知っていますが、時にはそれが役立つかもしれません。

私は4つのtextviewsを垂直線形レイアウトに配置しました。

<Linearlayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation:"vertical"

    ...>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line1"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line2"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line3"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line4"
       .../>
</LinearLayout>

このソリューションは、ラベルのようにテキストビューのテキストが一定である場合に適しています。


1
これを行わないでください。
humble_wolf

-23

TextViewは、1行に収まる十分なスペースがなく、singLineがtrueに設定されていない場合、複数行になります。

1行でスペースが入ると、複数行にはなりません。


7
固定幅の代わりにfill_parentを使用したい場合はどうなりますか?私のコンテンツがカットされた場合、カットされます...
happyhardik

6
私は試してみるandroid:singleLine="false"か、またはandroid:inputType="textMultiLine"(Marageusで説明されているように)android:inputType="textMultiLine"両方が存在する場合に優先する通知
Romantic Electron

コメントした他の人の見解を共有すると、これは完全に間違っており、これがなぜ受け入れられた答えであるのかについて私は驚いています。
Aleks G 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.