27

我正在尝试通过代码创建多行 EditText。这就是我使用的:

EditText txt = new EditText(this);    
lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1.0f);
txt.setLayoutParams(lp);
txt.setSingleLine(false); 
txt.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);

但它仍然在一行中。

4

8 回答 8

62

这应该这样做

txt.setSingleLine(false);
txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
于 2013-05-09T10:38:11.977 回答
38

你也可以使用这个:

txt.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_MULTI_LINE);
于 2013-09-19T12:26:10.070 回答
21

结合以上所有答案是正确的答案,所以这里是:

texInput.setSingleLine(false);
texInput.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
texInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
texInput.setLines(5);
texInput.setMaxLines(10);
texInput.setVerticalScrollBarEnabled(true);
texInput.setMovementMethod(ScrollingMovementMethod.getInstance());
texInput.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
于 2016-03-15T14:36:45.883 回答
3

将其包含在您的代码中:

txt.setLines(maxlines);

maxlines 将是您希望在 EditText 中允许的最大行数。

于 2013-02-22T20:51:07.983 回答
2

最终对我有用的组合是:

answerView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE);
answerView.setSingleLine(false);

至少部分我setInputType用于配置几个不同的选项,因此它比其他一些可能性更有意义。

于 2015-05-27T16:39:21.017 回答
1

在我的手机上,更改 imeOptions 和 inputType 没有任何作用;设置 moveMethod 和/或 scrollBarStyle 会严重影响组件,以至于用户将无法选择任何文本;isVerticalScrollBarEnabled 和 isHorizo​​ntalScrollBarEnabled 什么都不做;我能做的最好的就是使用

txt.setSingleLine(false);

txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);似乎是不必要的)但这不会在该死的 EditText 中显示任何滚动条。最终我放弃了,只要我需要一个多行的 EditText,我就会膨胀一个布局片段。这是布局:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:inputType="textMultiLine"
android:lines="4"
android:minLines="4"
android:gravity="top|start"
android:maxLines="4"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:scrollbars="vertical"
/>

这是 Anko 片段:

fun ViewManager.multiLineEditText(@StyleRes theme: Int = 0, init: EditText.() -> Unit): EditText = ankoView(
    { ctx -> ctx.layoutInflater.inflate(R.layout.util_multilineedittext, this@multiLineEditText as ViewGroup, false) as EditText }, theme, init)

Android 开发太难了。

于 2017-04-19T09:50:39.103 回答
0

试试这个

txt.setLines(number of lines);
于 2013-02-22T20:51:18.313 回答
0

除了上述建议之外 - 如果您无法使其正常工作,您可能需要设置以下附加参数

texInput.setHorizontallyScrolling(false);
texInput.setHorizontalScrollBarEnabled(false);

如果您正在以编程方式更改编辑文本的高度,那么您可能还想通过调用 requestLayout() 来请求布局。

于 2018-11-17T11:43:38.337 回答