gpt4 book ai didi

java - 使用 Java 而不是 xml 时多行文本中的不同行为

转载 作者:行者123 更新时间:2023-11-30 11:48:48 24 4
gpt4 key购买 nike

我的问题是多行文本在我的 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>
.
.
.

在代码中,我为我的文本行、文本主题和文本主体使用自己的类型:

主题表行:

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);
}
}

主题 TextView :

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 代码中,我添加了一个主题,后跟一个“正文”。这些是方法。 (一切正常,但文本未换行。):

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但我不确定。

最佳答案

已解决:我不知道为什么但是...

setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_MULTI_LINE);

代替

setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);

完成任务。

关于java - 使用 Java 而不是 xml 时多行文本中的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8635532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com