web-dev-qa-db-ja.com

Androidのtextviewでテキストをラップする方法

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

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

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

しかし、動作しません。

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

75
Sameer

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

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

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

MaxLinesのカウントは、TextViewをラップしたランダムな最終ピースのようです。

50
Guykun

TextViewTableLayout内にある場合の解決策は、TableLayoutAndroid:shrinkColumns="1"を設定することです。 (1を、ラップするTextViewが含まれている列番号に置き換えます。(0インデックス付き))

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

その他のケースについては、他の回答を参照してください。

FWIW、私は最初にそれと仕事のようなものを得た

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

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

30
aij

制約レイアウト

<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幅により、左右の制約でウィジェットの幅を決定できます。

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

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

25
Baker

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

  • Android:ellipsize="none":テキストはtextviewの幅でカットされません

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

10
Kartaguez

これで問題が解決されます:Android:layout_weight="1"

7
user755121

わかりました。真実は中間のどこかにあります。親と子の視点から問題を見なければならないからです。以下のソリューションは、Androidバージョンに関係なく、スピナーモード= dialogの場合にのみ機能します(問題ありません。VDおよびDesireSでAndroid => 2.2でテストしました)。

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

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

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

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

5
skourkos

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

3
user7652193

Android:maxEmsAndroid:layout_weight="1"とともに指定の値に設定すると、指定されたemの長さに達するとTextViewがラップされます。

3
Freddroid

RecyclerView内のレイアウト内のTextViewで作業していました。 Read this messageのテキストが切り取られていました。たとえば、Read thisです。 TextViewでAndroid:maxLines="2"を設定しようとしましたが、何も変わりませんでした。ただし、Android:lines="2"は最初の行にRead thisを、2行目にmessageをもたらしました。

2
Stan Kurdziel

同じ問題がありました。次の変更により機能しました-

Android:layout_width="wrap_content"

Ellipsis、maxLines、またはlayout_weight-すべての違いはありませんでした。注-親の幅もwrap_contentとして設定されます。

1
Medha

AppCompatTextViewapp:breakStrategy="simple"を使用すると、段落レイアウトを制御します。

3つの定数値があります

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

TextView xmlでの設計

<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

Textview breakStrategy image

1
Nirav Bhavsar

TextViewsのサポートライブラリの自動サイズ設定を使用できます。同様のスレッドで my answer を確認してください。

1
blueware

次のようなものでScrollViewにTextViewを追加する必要があります。

<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>
0
Ludovic Landry

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

Android:layout_width = "60dp"

幅を自由に変更できます。長い文を入力して、このように機能するかどうかを確認してください

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

0
user8470132

@Guykunのアプローチを試す

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

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

0

それを行う簡単な方法:

Android:layout_width="match_parent"
Android:layout_height="wrap_content"

デフォルトでテキストを折り返します

0
Alen Lee

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
Frank Odoom

Android 2.2を使用しています。画面を超えると、textviewは次の行に自動的に移動します。

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

Android:layout_marginRight="52dp"
0
Britc

奇妙なことに-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行に折り返されます。

0
Ready4Android