以编程方式创建多行EditText

时间:2013-02-22 20:44:29

标签: android android-edittext multiline

我正在尝试按代码创建多行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);

但它仍在一条线上。

8 个答案:

答案 0 :(得分:52)

这应该这样做

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

答案 1 :(得分:26)

您也可以使用:

txt.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_MULTI_LINE);

答案 2 :(得分:14)

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

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

答案 3 :(得分:3)

在您的代码中包含此内容:

txt.setLines(maxlines);

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

答案 4 :(得分:1)

最终对我有用的组合是:

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

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

答案 5 :(得分:1)

在我的手机上,更改imeOptions和inputType什么都不做;设置movementMethod和/或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上的开发非常糟糕。

答案 6 :(得分:0)

试试这个

txt.setLines(number of lines);

答案 7 :(得分:0)

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

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

如果要通过编程方式更改Edittext的高度,则可能还希望通过调用requestLayout()来请求布局。