【问题标题】:android EditText not automatically wrapping textandroid EditText 不会自动换行文本
【发布时间】:2013-10-03 19:57:05
【问题描述】:

我到处查看,在这个网站上有很多类似的问题,但我没有找到一个有效的问题,我想知道我做错了什么。我有一个必须以编程方式添加的 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(这个很好,我不希望它多行),然后是两个按钮和一个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

据说 setHorizo​​ntallyScrolling(false) 将允许包装,但添加只会让事情变得更糟。不仅文本不换行,而且应该换行的文本也不可见,因为 edittext 只显示文本的第一部分(不滚动)。我仍然可以按 Enter 键,并且将按预期创建一个新行,但我无法换行任何文本。

【问题讨论】:

    标签: android android-edittext word-wrap


    【解决方案1】:

    问题在于 EditText 所在的 TableLayout。EditText 位于可拉伸列中,将列设置为也可收缩修复了该问题。这是我对 xml 布局所做的更改。

    <TableLayout
      android:id="@+id/LineItemLayout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginBottom="25dp"
      android:stretchColumns="4"
      android:shrinkColumns="4"
      >
    

    这就是我在编码方面拥有的最终为我工作的东西:

    EditText p = new EditText(EnvelopeModify.this);
    p.setText(lineItems.get(x).getProposalDesc());
    p.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
    p.setBackgroundResource(R.color.usedOnProposal);
    p.setMinLines(1);
    

    【讨论】:

    • 当我添加 android:shrinkColumns 时问题已修复
    【解决方案2】:

    您正在禁用此行中的水平滚动。-

    p.setHorizontallyScrolling(false);
    

    至于多行的问题,你可以试试。-

    p.setSingleLine(false);
    p.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
    

    【讨论】:

    • 这也不起作用,有什么我必须摆脱的吗?我知道 p.setHorizo​​ntallyScrolling(false) 停止了滚动,但从我在其他地方读到的内容来看,它也应该强制它换行。我刚去掉它,文本没有滚动,这很奇怪,因为它是在我添加它之前。
    • mmh 确实很奇怪。您可以尝试将 layout_width 设置为 match_parent 吗?
    • 如果我将 EditText 宽度设置为 match_parent 它不会显示在屏幕上。我使用了上面注释掉的代码,并尝试了 TableLayout.LayoutParams 和 ViewGroup.LayoutParams (表格布局是我之前使用的,因为我想设置权重)。
    • 好的,我找到了,我也将列设置为可收缩的并且有效。我猜它正在拉伸所有文本,但不是实际的文本框,idk,但感谢您的帮助。如果你想编辑你的答案,我会接受,否则我会稍后再回答。
    • 很高兴你发现了 :) 至于我,你自己回答也没关系(毕竟你找到了答案),但还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2014-06-01
    • 2015-05-10
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多