Androidのtextviewでテキストを折り返す方法


86

AndroidプラットフォームのTextViewでテキストを折り返す方法を知っている人はいますか?つまり、textviewのテキストが画面の長さを超える場合は、2行目に表示する必要があります。

私は以下を検索して試しました:

android:scrollHorizontally="false",
android:inputType="textMultiLine",
android:singleLine="false"

しかし、どれも機能しません。

誰かが私がそれを行う方法を提案できますか?


7
TextViewsは、デフォルトでワードラップする必要があります。レイアウト全体を投稿できますか?
danh32 2011年

万が一、Textviewはテーブルレイアウト内にありますか?もしそうなら、私はあなたのために答えがあります。
JohnFx 2011

1
私の場合、約半ダースの属性(以下で説明)を追加して、textviewにテキストを複数行に折り返すように強制した後、成功せずに、属性があることに気付きましたandroid:inputType="textPersonName"。どうやらそれはAndroidStudioのデザインツールによって追加されたようです。その属性を削除すると問題が修正されました!ラッピングを防ぐ他の入力タイプもあるかもしれません。
LarsH

回答:


55

私にとって、この問題はAndroid <4.0でのみ発生しました

私が使用したパラメーターの組み合わせは次のとおりです。

android:layout_weight="1"
android:ellipsize="none"
android:maxLines="100"
android:scrollHorizontally="false"

maxLinesカウントは、TextViewをラップさせたランダムな最後のピースのようでした。


9
私は今その古いスレッドを知っていますが、私は私の発見を投稿すると思いました。'android:maxLines'のみを使用し、テキストをラップしました。応援@Guykun
StuStirling

繰り返しますが、これは単にTextViewの高さをに設定するmatch_parentことと同じです。これは、TextViewの高さを拡張して余分な行を含めることと同じではありません。
SMBiggs 2016

50

制約レイアウト

<TextView
android:id="@+id/some_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"

app:layout_constraintLeft_toLeftOf="@id/textview_above"
app:layout_constraintRight_toLeftOf="@id/button_to_right"/>
  • レイアウト幅がゼロであることを確認してください
  • 左/右の制約が定義されています
  • wrap_contentのレイアウトの高さにより、上下に拡張できます。
  • android:maxLines="2"垂直方向の拡張を防ぐように設定します(2は単なる例です)
  • 楕円は確率が高いです。最大行数の良いアイデアandroid:ellipsize="end"

0dp widthを使用すると、左右の制約でウィジェットの幅を決定できます。

左/右の制約を設定すると、ウィジェットの実際の幅が設定され、その中でテキストが折り返されます。

制約レイアウトのドキュメント


はい!これはまさにそれがどのように機能するかです!幅を0dpに設定してください
Yoraco Gonzales

左右の制約を設定すると、テキストが右の境界を超えてオーバーフローするのではなく、折り返すのに役立ちました
JiaTse19年

31

場合についてTextView内側にあるTableLayout、溶液を設定するandroid:shrinkColumns="1"上でTableLayout。(交換してください1折り返したいTextViewが含まれている列番号にます。(0-インデックス付き))

AFAICT、他の属性は必要ありません TextView

その他の場合については、こちらの他の回答をご覧ください。

FWIW、私は最初にそれを使って仕事をするようになりました

 <TextView
   android:id="@+id/inventory_text"
   android:layout_width="fill_parent"
   android:layout_weight="1"
   android:width="0dp"

しかし、その結果、ダイアログの下部に余分な空きスペースができました。


これが私が探していたものでした!そうでなければ私の言葉は
途絶え

12

2つのパラメータを使用する必要があります:

  • android:ellipsize="none" :テキストはテキストビューの幅でカットされません

  • android:scrollHorizontally="false" テキストは必要な数の行で折り返されます


5
それは私にはうまくいきません。(FWIW、TableLayoutのTableRowにTextViewがあります。)
aij

8

で使用するapp:breakStrategy="simple"AppCompatTextView、段落のレイアウトを制御できます。

3つの定数値があります

  • バランスの取れた
  • 高品質
  • シンプル

TextViewxmlでの設計

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/textquestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:scrollHorizontally="false"
        android:text="Your Question Display Hear....Your Question Display Hear....Your Question Display Hear....Your Question Display Hear...."
        android:textColor="@android:color/black"
        android:textSize="20sp"
        android:textStyle="bold"
        app:breakStrategy="simple" />

現在の最小APIレベルが23以上の場合、コーディング

yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

詳細については、このBreakStrategyを参照してください

TextviewbreakStrategy画像


7

これで問題が解決するはずですandroid:layout_weight="1"


これにより、TextViewが拡張されてできるだけ多くのスペースが必要になります。これは、高さをに設定するのと同じmatch_parentです。OPが望んでいたものとまったく同じではありません。
SMBiggs 2016

1
TableLayoutの場合layout_weight="1"、問題を修正しました。ただし、TextViewを含むTableRowlayout_heightは特定の値に設定されていました。多分誰かのために役立つでしょう
キット

5

OKみんな、真実は真ん中のどこかにあります。なぜなら、あなたは親と子の視点から問題を見なければならないからです。以下の解決策は、スピナーモード= dialogAndroidのバージョンに関係なくのみ機能します(問題はありません..Android => 2.2のVDおよびDesireSでテストしました):

  1. スピナーの(親)モードを次のように設定します。

    android:spinnerMode="dialog"  
    
  2. textviewの(子カスタムビュー)プロパティを次のように設定します。

    android:layout_weight="1"  
    android:ellipsize="none"  
    android:maxLines="100"  
    android:scrollHorizontally="false"
    

これがあなたにも役立つことを願っています。


「ドロップダウン」モードで機能させるために多くのことを試みましたが、何も機能しませんでした。「ダイアログ」モードに落ち着きました。
mangesh 2015

4

android:maxEms一緒に指定された値に設定するandroid:layout_weight="1"と、emsの指定された長さに達すると、TextViewが折り返されます。


相対レイアウトに配置されたTextViewでも機能します。
ayz4sci 2018年

何時間も検索してきましたが、constraintLayoutでも
うまく機能し

3

Android Studio 2.2.3では、inputTypeプロパティの下に。というプロパティがありますtextMultiLine。このオプションを選択すると、私にとって同様の問題が解決されました。それがお役に立てば幸いです。


2
これは、TextviewではなくEditText用です
PsychedelicSubstance

2

RecyclerView内のレイアウト内のTextViewで作業していたところです。テキストが途切れてしまいました。たとえば、次のように表示されRead this messageましたRead thisandroid:maxLines="2"TextViewで設定してみましたが、何も変わりませんでした。しかし、android:lines="2"中になったRead this最初の行にし、message第二に。


1

私も同じ問題を抱えていました。次の変更で動作しました-

android:layout_width="wrap_content"

省略記号、maxLines、またはlayout_weight-すべてが違いを生むことはありませんでした。注-親の幅もwrap_contentとして設定されます。


1

あなたがしなければならないのはあなたのtextview幅を設定することです

android:layout_width = "60dp"

幅はお好みに合わせて変更できます。長い文を入力するだけで、このように機能するかどうかを確認できます

android:text = "私は世界クラスのソフトウェアエンジニアになりたい"


1

@Guykunのアプローチを試してください

android:layout_weight="1" android:ellipsize="none" android:maxLines="100" android:scrollHorizontally="false"

また、親の幅がコンテンツをラップするように設定されていないことを確認してください。これは私が欠けていたものです。


0

Android 2.2を使用していますが、画面を超えると、テキストビューは自動的に次の行に移動します。

画面が終了する前にテキストを次の行に移動させたい場合は、追加するだけです(独自のdp値を入力するだけです)。これは、テキストの右側に画像がある場合に役立ちます。

android:layout_marginRight="52dp"

0

不思議なことに、TextViewをコードで作成し、ラップしました。標準的なもの以外は何も設定していませんが、自分で確認してください。

LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
childParams.setMargins(5, 5, 5, 5);

Label label = new Label(this);
label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label");
label.setLayoutParams(childParams);

params定義からわかるように、私はLinearLayoutを使用しています。クラスLabelは単にTextViewを拡張するだけで、フォントサイズとフォントの色を設定する以外は何もしません。

エミュレーター(APIレベル9)で実行すると、テキストが自動的に3行に折り返されます。


このコードの使用に注意してくださいLinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);。おそらくそれはあなたが「
自動魔法

0

layout_with明確なサイズに設定するだけで、テキストが最大幅に達すると、次の行にオーバーフローして折り返し効果が発生します。

<TextView
    android:id="@+id/segmentText"
    android:layout_marginTop="10dp"
    android:layout_below="@+id/segmentHeader"
    android:text="You have the option to record in one go or segments(if you swap options 
    you will loose your current recordings)"
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

0

秘訣はtextViewの幅を使用することです。次のように、専用の数値にするようにしてください。

<TextView
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

私は結果なしで多くの解決策を試しました、私は試しました:

    android:ellipsize="none"
    android:scrollHorizontally="false"

ラップオプションをトリガーした唯一のことは、専用の幅です


-1

次のようなものを使用して、TextViewをScrollViewに追加する必要があります。

<ScrollView android:id="@+id/SCROLL_VIEW"  
android:layout_height="150px"   
android:layout_width="fill_parent">  

<TextView   
   android:id="@+id/TEXT_VIEW"   
   android:layout_height="wrap_content"   
   android:layout_width="wrap_content"   
   android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" />  
 </ScrollView>

4
返信ありがとうございますが、横スクロールを入れないように、行の長さを超えたときにテキストを折り返すのが私の目的です。
同じ2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.