誰がテキストのどこが悪いのか教えてもらえますか? 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>
自分で修正しました。キーは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>
この質問に対する唯一の正しい答えは、親を適切な幅(この場合はFILL_PARENT
、WRAP_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));
2つのパラメーターを使用する必要があります。
Android:ellipsize="none"
:テキストはtextviewの幅でカットされません
Android:scrollHorizontally="false"
テキストは必要な数の行に折り返されます
Xmlファイルで使用するだけで十分です。
Android:singleLine="false".
それがうまくいくことを願っています。
ではごきげんよう!
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>
のようなもの
参照:
http://code.google.com/p/Android/issues/detail?id=40
それが誰かを助けることを願っています。
コードのレイアウトパラメーターの1つが間違っています。最初のTextView
Android:layout_width="wrap_content"
への変更
Android:layout_width="fill_parent"
画面幅外のサイズのテキストは次の行に折り返され、Android:singleline="false"
に設定されます。
テキストビューAndroid:minHeight="some pixes"
またはAndroid:width="some pixels"
の高さを設定します。問題を解決します。
私の場合、入力タイプを削除するとうまくいきましたが、Android:inputType = "textPostalAddress"を使用していました。これは、textviewが1行に固定されてラッピングされなかったためです。
私はAndroid(およびGUI)初心者ですが、ソフトウェアの経験が豊富です。私はいくつかのチュートリアルを経験しましたが、これは私の理解です:
layout_widthとlayout_heightはTextViewの属性です。これらは、TextViewがそれ自体をどのように形作るかについての指示であり、TextView内でコンテンツを処理する方法を参照するものではありません。
"fill_parent"を使用する場合、TextViewは親ビューに対して相対的にシェイプする必要があり、塗りつぶす必要があると言っています。
「wrap_content」を使用する場合、親ビューを無視し、TextViewのコンテンツでその形状を定義する必要があると言っています。
これは紛らわしい点だと思います。 "wrap_content"は、TextViewにコンテンツの管理方法(行の折り返し)を指示するのではなく、コンテンツに関連して自身をシェーピングする必要があることを伝えます。この場合、改行文字がないため、すべてのテキストが1行に収まるようにシェイプされます(残念ながら親がオーバーフローします)。
親を水平方向に塗りつぶし、その内容を垂直方向にラップする必要があると思います。
私は同様の問題を抱えていました。そこでは、水平に重み付けされた2つのTextViewがテキストをラップしませんでした。私は後で、問題の原因が、viewparents親がmatch_parentではなくwrap_contentを持っていることが原因であることを発見しました。
高さ、つまりAndroid:height = "Some size"を増やすと、うまく機能します。
私はこの属性を入れました:
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.
これは古いスレッドですが、私が助けてくれた経験を共有したいと思います。私のアプリケーションは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"/>
これが誰かを助けることを願っています。
私が表示しようとしているテキストには(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"
/>
Android:lines="1"
を削除してAndroid:maxLines="2"
を追加したところ、自動的に折り返されるテキストが取得されました。問題はAndroid:lines
属性でした。これにより、テキストの折り返しがnotになります。
これを修正するためにmaxEms
またはsingleLine="false"
(非推奨のAPI)を使用する必要はありませんでした。
問題は正しいことを知っていますが、私の場合、問題は「dp」でtextSizeプロパティを設定することでした-「sp」に変更しましたが、正常に動作します。
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"/>
ur TextView
タグでAndroid:singleLine="false"
を使用する必要があります。
私は主に制約レイアウトを使用しています。
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"
=テキストは、テキスト自体に関係なく、近くのレイアウトに合わせて折りたたまれます
ディスプレイのレイアウトの特定の組み合わせに依存すると思います。一部のフラグはオーバーライドまたは無視される場合があります。タブを持つTabHostがあり、各タブはテーブルのリストです。したがって、これはListViewのタブであり、各行はTextViewのTableLayoutです。上記の修正を試しましたが、どれも機能しませんでした。
この問題を解決するために、ようやく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>
それが役に立てば幸い。
私の場合、TableRow > ScrollView > TextView
ネスティングで、Android:layout_width
をfill_parent
にTableRow
に設定し、wrap_content
にScrollView
に設定することで問題を解決しました。およびTextView
。
文字列の途中に\ nを追加しましたが、問題ありませんでした。