我的問題是多行文本在我的xml模板中正常工作。如果文字寬於屏幕,則會將其包裝到下一行。但是,如果我嘗試同樣在Java中,文本不會被包裝:使用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">
<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>
.
.
.
現在,我想用這些零件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">
</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);
}
我懷疑該行BodyTextView的setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT));
不能正常工作,因爲當我設置layoutWidth至100或200,寬度不會被最小化並伸出屏幕。這是爲什麼?如果我嘗試將主題縮短到200(TopicTextView),我會得到一個更小的欄,所以Java方法應該可以正常工作,但在BodyTextView中它會忽略寬度。有人知道爲什麼這樣嗎?我已經想過this bug但我不確定。而不是
對我來說這是什麼目標?當我縮小表格時,所有列的大小與最寬的內容大小相同。此外,文字也不包裹。 – Bevor 2011-12-26 12:50:11