我到处查看,这个网站上有很多类似的问题,但我还没有找到一个有效的问题,我想知道我做错了什么。我有一个必须以编程方式添加的 EditText,它通常只有一行文本,但如果文本长于视图的宽度,我需要它来换行。
我使用的唯一 xml 用于表格布局,最终将编辑文本添加到
<TableLayout
android:id="@+id/LineItemLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="25dp"
android:stretchColumns="4"
>
</TableLayout>
编辑文本是第 4 列中的文本,但即使我删除了 stretchColumns 属性,它仍然无法正常工作。(我在想也许拉伸柱弄乱了宽度,它无法计算何时换行)
这是我添加到表中的每一行的循环代码,p 是我无法正常工作的 EditText。只是一点解释,该行包含一个数字的 EditText(这个很好,我不希望它多行),然后是两个 Buttons 和一个 TextView,然后最后一项是 EditText,它可以拉伸其余的宽度并且应该是换行文本。我把它们都放在这里以防它们引起问题,因为此时我不知道下一步该尝试什么。
final TableRow l = new TableRow(EnvelopeModify.this);
TextView t = new TextView(EnvelopeModify.this);
t.setText("$" + lineItems.get(x).getTotal() + ", " + lineItems.get(x).getQuantity() + " " + lineItems.get(x).getItemUnits() + "");
t.setPadding(5, 5, 30, 5);
EditText p = new EditText(EnvelopeModify.this);
p.setText(lineItems.get(x).getProposalDesc());
p.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
p.setBackgroundResource(R.color.blueEditText);
p.setMinLines(1);
p.setHorizontallyScrolling(false);
p.setImeOptions(EditorInfo.IME_ACTION_DONE);
//TableLayout.LayoutParams tempParams = new TableLayout.LayoutParams(0,LayoutParams.WRAP_CONTENT,1f);
//p.setLayoutParams(tempParams);
EditText o = new EditText(EnvelopeModify.this);
o.setText(lineItems.get(x)._order);
o.setWidth(50);
o.setInputType(InputType.TYPE_CLASS_NUMBER);
Button d = new Button(EnvelopeModify.this);
d.setText("Remove");
Button e = new Button(EnvelopeModify.this);
e.setText("Edit");
l.addView(o);
l.addView(d);
l.addView(e);
l.addView(t);
l.addView(p);
lineItemLayouts.add(l); // this is the tableLayout in the xml above
据说 setHorizontallyScrolling(false) 将允许包装,但添加只会让事情变得更糟。不仅文本不换行,而且应该换行的文本也不可见,因为 edittext 只显示文本的第一部分(不滚动)。我仍然可以按回车键,并且将按预期创建一个新行,但我无法换行任何文本。