web-dev-qa-db-ja.com

Android TextViewテキストがラップされない

誰がテキストのどこが悪いのか教えてもらえますか? 1行より長いテキストは次の行に折り返されず、画面を超えてしまいます。

コードは次のとおりです。

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent" 
    Android:layout_height="wrap_content"
    Android:orientation="horizontal" 
    Android:padding="4dip">

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent" 
        Android:layout_height="wrap_content"
        Android:orientation="vertical" 
        Android:padding="4dip">

        <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:layout_width="fill_parent" 
            Android:layout_height="wrap_content"
            Android:orientation="horizontal" 
            Android:padding="4dip">
            <TextView 
                Android:id="@+id/reviewItemEntityName"
                Android:layout_width="wrap_content" 
                Android:layout_height="wrap_content"
                Android:text="event/venue" 
                Android:textColor="@color/maroon"
                Android:singleLine="true" 
                Android:ellipsize="end" 
                Android:textSize="14sp"
                Android:textStyle="bold" 
                Android:layout_weight="1" />

            <ImageView 
                Android:id="@+id/reviewItemStarRating"
                Android:layout_width="wrap_content" 
                Android:layout_height="wrap_content"
                Android:layout_alignParentTop="true"
                Android:layout_alignParentBottom="true"
                Android:src="@drawable/title_1_star" />
        </LinearLayout>

        <TextView 
            Android:id="@+id/reviewItemDescription"
            Android:layout_width="fill_parent" 
            Android:layout_height="wrap_content"
            Android:text="Description comes here" 
            Android:textSize="12sp" 
            Android:layout_weight="1"/>
    </LinearLayout>
</LinearLayout>
74
d-man

自分で修正しました。キーはAndroid:width="0dip"です

<LinearLayout 
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"
    Android:padding="4dip"
    Android:layout_weight="1">

    <LinearLayout 
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        Android:padding="4dip">

        <TextView
            Android:id="@+id/reviewItemEntityName"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:textColor="@color/maroon"
            Android:singleLine="true"
            Android:ellipsize="end"
            Android:textSize="14sp"
            Android:textStyle="bold"
            Android:layout_weight="1" />

        <ImageView
            Android:id="@+id/reviewItemStarRating"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentTop="true"
            Android:layout_alignParentBottom="true" />
        </LinearLayout>

        <TextView
            Android:id="@+id/reviewItemDescription"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:textSize="12sp"
            Android:width="0dip" />

    </LinearLayout>

    <ImageView
        Android:id="@+id/widget01"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/arrow_nxt"
        Android:layout_gravity="center_vertical"
        Android:paddingRight="5dip" />

</LinearLayout> 
80
d-man

この質問に対する唯一の正しい答えは、親を適切な幅(この場合はFILL_PARENTWRAP_CONTENT)に設定し、ラップする必要のあるtextviewにAndroid:layout_weight=1を使用する必要があるということです。 。

SingleLineはデフォルトでオンになっているため、変更は行われません。

widthを0pxに設定しても機能しますが、良い解決策ではありません。

Xmlを使用したいくつかの例(今回はテーブルビュー):

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent" Android:layout_height="fill_parent"
    Android:orientation="vertical">
    <TableLayout Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" Android:stretchColumns="*"
        Android:id="@+id/tableLayout1">
        <TableRow Android:id="@+id/tableRow1" Android:layout_width="fill_parent"
            Android:layout_height="wrap_content">
            <TextView Android:text="test1" Android:layout_width="fill_parent"
                Android:layout_height="wrap_content" Android:layout_weight="0" />
            <TextView Android:layout_weight="1"
                Android:text="test2 very long text that needs to be wrapped properly using layout_weight property and ignoring singleline since that is set by default..."
                Android:layout_width="fill_parent" Android:layout_height="wrap_content" />
        </TableRow>     
    </TableLayout>
</LinearLayout>

コードでこれを設定する場合、この例のように3番目のパラメーターとしてlayout_weightを探しています。

row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
TextView label = new TextView(getApplicationContext());
label.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT, 1f));
40
hcpl

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

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

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

19
Kartaguez

Xmlファイルで使用するだけで十分です。

Android:singleLine="false".

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

ではごきげんよう!

12
Dhasneem

TableLayout>TableRow>TextViewを使用すると、これらのソリューションが機能しませんでした。それからTableLayout.shrinkColumns="*"を見つけました。働いた唯一の他の解決策は、TextViewをlayout_width:250pxなどに強制することでしたが、そのような幅を強制するのは好きではありません。

テーブルで作業する場合は、このようなものを試してください。

            <TableLayout 
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:shrinkColumns="*">

shrinkColumns="*"が必要です

これは明らかに<LinearLayout>内にあります。 <LinearLayout> <TableLayout> <TableRow> <TextView>のようなもの

参照:

TableLayout

http://code.google.com/p/Android/issues/detail?id=40

それが誰かを助けることを願っています。

10
wired00

コードのレイアウトパラメーターの1つが間違っています。最初のTextView

Android:layout_width="wrap_content"

への変更

Android:layout_width="fill_parent" 

画面幅外のサイズのテキストは次の行に折り返され、Android:singleline="false"に設定されます。

4
user244561

テキストビューAndroid:minHeight="some pixes"またはAndroid:width="some pixels"の高さを設定します。問題を解決します。

3
Chandra

私の場合、入力タイプを削除するとうまくいきましたが、Android:inputType = "textPostalAddress"を使用していました。これは、textviewが1行に固定されてラッピングされなかったためです。

3
iBabur

私はAndroid(およびGUI)初心者ですが、ソフトウェアの経験が豊富です。私はいくつかのチュートリアルを経験しましたが、これは私の理解です:

layout_widthとlayout_heightはTextViewの属性です。これらは、TextViewがそれ自体をどのように形作るかについての指示であり、TextView内でコンテンツを処理する方法を参照するものではありません。

"fill_parent"を使用する場合、TextViewは親ビューに対して相対的にシェイプする必要があり、塗りつぶす必要があると言っています。

「wrap_content」を使用する場合、親ビューを無視し、TextViewのコンテンツでその形状を定義する必要があると言っています。

これは紛らわしい点だと思います。 "wrap_content"は、TextViewにコンテンツの管理方法(行の折り返し)を指示するのではなく、コンテンツに関連して自身をシェーピングする必要があることを伝えます。この場合、改行文字がないため、すべてのテキストが1行に収まるようにシェイプされます(残念ながら親がオーバーフローします)。

親を水平方向に塗りつぶし、その内容を垂直方向にラップする必要があると思います。

2
Ben Horner

私は同様の問題を抱えていました。そこでは、水平に重み付けされた2つのTextViewがテキストをラップしませんでした。私は後で、問題の原因が、viewparents親がmatch_parentではなくwrap_contentを持っていることが原因であることを発見しました。

1
Supahfly

高さ、つまりAndroid:height = "Some size"を増やすと、うまく機能します。

1
Phani varma

私はこの属性を入れました:

Android:inputType="textMultiLine"

textViewに追加すると、折り返し行が表示され、ユーザーは新しい行を入力することができます。

================================================== ==========

この投稿に来たら、複数行を表示できるBig TextViewを作成して、これらの属性も必要になる場合があります。

Android:layout_height="Xdp" //where X is a number depends on how big Textview you want
Android:gravity="top" //in order to make your text start from the top of your TextView.
1
Linh Lino

これは古いスレッドですが、私が助けてくれた経験を共有したいと思います。私のアプリケーションはOS 2.0および4.0+で正常に機能していましたが、OS 3.xを実行しているHTC電話ではテキストは折り返されませんでした。私のために働いたのは、これらのタグの両方を含めることでした。

Android:maxLines="100"
Android:scrollHorizontally="false"

どちらかを削除すると、os 3.0デバイスだけでは機能しませんでした。 「楕円化」パラメータは中立的な効果がありました。以下は完全なtextviewタグです。

<TextView
                Android:id="@+id/cell_description"
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:paddingTop="5dp"
                Android:maxLines="100"
                Android:scrollHorizontally="false"
                Android:textStyle="normal"
                Android:textSize="11sp"
                Android:textColor="@color/listcell_detail"/>

これが誰かを助けることを願っています。

1
nsuinteger

私が表示しようとしているテキストには(string.xmlで)一重引用符が含まれていたことを理解するのに何時間も費やしましたので、バックスラッシュでエスケープし、うまく動作しました=> theTextViewの高さはテキストを正しくラップしていました:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"
    Android:paddingLeft="16dp"
    Android:paddingRight="16dp"
    Android:paddingTop="16dp"
    tools:context=".MainActivity">

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:fontFamily="sans-serif-smallcaps"
        Android:text="@string/instructions"
        Android:textAlignment="center"
        Android:textSize="18sp"
        Android:textStyle="bold" />

    <EditText
        Android:id="@+id/keyword"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/defaultKeyword"
        Android:textSize="22sp"
        />
0
smasper

Android:lines="1"を削除してAndroid:maxLines="2"を追加したところ、自動的に折り返されるテキストが取得されました。問題はAndroid:lines属性でした。これにより、テキストの折り返しがnotになります。

これを修正するためにmaxEmsまたはsingleLine="false"(非推奨のAPI)を使用する必要はありませんでした。

0
Siddharth

問題は正しいことを知っていますが、私の場合、問題は「dp」でtextSizeプロパティを設定することでした-「sp」に変更しましたが、正常に動作します。

0
Krystian

Android:ems="23"を使用して問題を解決しました。 23をあなたの場合の最良の値に置き換えてください。

<TextView
        Android:id="@+id/msg"
        Android:ems="23"
        Android:text="ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab "
        Android:textColor="@color/white"
        Android:textStyle="bold"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"/>
0
Beto Caldas

ur TextViewタグでAndroid:singleLine="false"を使用する必要があります。

0
Praveen

私は主に制約レイアウトを使用しています。

1)Android:layout_width="match_parent" =エッジに合わせてストレッチしようとします

2)Android:layout_width="wrap_content" =近くの他のビューに関係なく、入力テキストのみに基づいています。たとえば、Android:textAlignment="center"を追加すると、テキストの形状が変更されます

3)Android:padding="12dp" Android:layout_width="0dp" Android:layout_weight="1" Android:singleLine="false"

=テキストは、テキスト自体に関係なく、近くのレイアウトに合わせて折りたたまれます

0
cagney

ディスプレイのレイアウトの特定の組み合わせに依存すると思います。一部のフラグはオーバーライドまたは無視される場合があります。タブを持つTabHostがあり、各タブはテーブルのリストです。したがって、これはListViewのタブであり、各行はTextViewのTableLayoutです。上記の修正を試しましたが、どれも機能しませんでした。

0
likejudo

この問題を解決するために、ようやくTextViewの高さにピクセルを追加することができました。

最初に、実際にTextViewの高さを取得する必要があります。ペイントされる前は0なので、簡単ではありません。

このコードをonCreateに追加します。

mReceiveInfoTextView = (TextView) findViewById(R.id.receive_info_txt);
if (mReceiveInfoTextView != null) { 
    final ViewTreeObserver observer = mReceiveInfoTextView.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int height = mReceiveInfoTextView.getHeight();
            int addHeight = getResources().getDimensionPixelSize(R.dimen.view_add_height);
            mReceiveInfoTextView.setHeight(height + addHeight);

            // Remove the listener if possible
            ViewTreeObserver viewTreeObserver = mReceiveInfoTextView.getViewTreeObserver();
            if (viewTreeObserver.isAlive()) {
                viewTreeObserver.removeOnGlobalLayoutListener(this);
            }
        }
    });
}

この行をdimens.xmlに追加する必要があります

<dimen name="view_add_height">10dp</dimen>

それが役に立てば幸い。

0
crubio

私の場合、TableRow > ScrollView > TextViewネスティングで、Android:layout_widthfill_parentTableRowに設定し、wrap_contentScrollViewに設定することで問題を解決しました。およびTextView

0
Janaka Bandara

文字列の途中に\ nを追加しましたが、問題ありませんでした。

0
Yusuf X