私の問題は、xmlテンプレートで複数行のテキストが正しく動作することです。テキストが画面よりも広い場合は、次の行に折り返します。しかし、私はJavaで同じことをしようとした場合、テキストはラップされません。xmlの代わりにJavaを使用すると、複数行のテキストの動作が異なる
私は私の将来のレイアウトをテストするため、次のXMLテンプレートを持っている:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal">
<TableLayout
android:id="@+id/messageTable"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:stretchColumns="*"
android:clickable="false">
<TableRow
android:layout_width="fill_parent"
android:background="#777777"
android:textColor="#FFFFFF"
android:clickable="false">
<TextView
android:id="@+id/topic"
android:text="This is the topic"
android:textColor="#FFFFFF"
android:layout_width="fill_parent"
android:textSize="14sp"
android:paddingLeft="5sp"
android:paddingRight="5sp"
android:paddingTop="2sp"
android:paddingBottom="2sp"
android:textStyle="bold"
android:clickable="false"
/>
</TableRow>
<TableRow>
<TextView
android:text="Mo., 26.12.2011, 10:00 - This is some example text. It will be wrapped in view. This works."
android:textSize="14sp"
android:paddingLeft="5sp"
android:paddingRight="5sp"
android:paddingTop="2sp"
android:paddingBottom="2sp"
android:scrollHorizontally="false"
android:inputType="textMultiLine"
android:longClickable="false"
android:clickable="false"
android:layout_width="0sp"
/>
</TableRow>
.
.
.
今、私はこれらの部品を使用したいです私のJavaコードのxml。表の行は、実際のアプリケーションで受け取るデータに応じて動的に生成する必要があります。今、実際のアプリケーションのXMLは次のようになります。
コード私は、テキスト行、テキストトピックやテキストボディのための独自の型を使用して<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal">
<TableLayout
android:id="@+id/messageTable"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:stretchColumns="*"
android:clickable="false">
</TableLayout>
.
.
.
:
TopicTableRow:
public class TopicTableRow extends TableRow {
public TopicTableRow(Context context) {
super(context);
setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
setBackgroundColor(Color.parseColor("#777777"));
setClickable(false);
}
}
TopicTextView:
public class TopicTextView extends TextView {
public final String TAG = "TopicTextView";
public TopicTextView(Context context) {
super(context);
PixelCalc pixelCalc = new PixelCalc(context, TAG);
setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
setPadding(pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2), pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2));
setTextColor(Color.parseColor("#FFFFFF"));
setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f);
setTypeface(Typeface.DEFAULT_BOLD);
setClickable(false);
}
}
と(テキストを折り返すしません)BodyTextViewは次のようになります。
public class BodyTextView extends TextView {
public final String TAG = "BodyTextView";
public BodyTextView(Context context) {
super(context);
PixelCalc pixelCalc = new PixelCalc(context, TAG);
setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT));
setPadding(pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2), pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2));
setClickable(false);
setLongClickable(false);
setHorizontallyScrolling(false);
setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f);
setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
}
}
(ご覧のとおり、幅の設定はテンプレートXMLとまったく同じです)。 Javaコードでは、トピックに続いて "body"が追加されます。これがメソッドです。 (すべてが正常に動作しますが、テキストは折り返されません。):
private void addTopic(String text) {
TopicTableRow topicTableRow = new TopicTableRow(this);
TopicTextView topicTextView = new TopicTextView(this);
topicTextView.setText(text);
topicTableRow.addView(topicTextView);
messageTable.addView(topicTableRow);
}
private void addStandardText() {
TableRow tableRow = new TableRow(this);
BodyTextView bodyTextView = new BodyTextView(this);
bodyTextView.setText(getString(R.string.standardText));
tableRow.addView(bodyTextView);
messageTable.addView(tableRow);
}
私は100または200にlayoutWidthを設定すると、幅がないのでBodyTextViewのラインsetLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT));
が正常に動作しないことに疑いを持っています最小化されてスクリーンからはみ出す。なぜこれはそうですか?トピックを200(TopicTextView)に短縮しようとすると、小さなバーが表示されるため、Javaメソッドは正しく動作するはずですが、BodyTextViewでは幅を無視します。誰が何故このことが分かりますか?私はすでにthis bugについて考えましたが、わかりません。
私の場合、この目標は何ですか?テーブルを縮小すると、すべての列のサイズが最も広いコンテンツと同じになります。さらに、テキストもラップされません。 – Bevor