Create a multiline EditText programmatically

二次信任 提交于 2019-11-30 17:12:37

This should do it

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

You may also use this:

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

Combining all above answers was the correct answer so here it is:

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

Include this in your code :

txt.setLines(maxlines);

maxlines will be the maximum number of lines you want to allow in your EditText.

The combination that finally worked for me was:

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

At least partially I was using setInputType for configuring several different options so it made more sense than some of the other possibilities.

On my phone, changing imeOptions and inputType does nothing; setting movementMethod and/or scrollBarStyle will screw the component so badly so that the user will be unable to select any text; isVerticalScrollBarEnabled and isHorizontalScrollBarEnabled does nothing; the best I could do is to use

txt.setSingleLine(false);

(txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); seems to be unnecessary) but that won't display any scrollbars in the god-damn EditText. Ultimately I gave up and I'm inflating a layout snippet anytime I need a multi-line EditText. Here's the layout:

<?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"
/>

And here's Anko snippet:

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)

Development on Android sucks so hard.

Ariel Magbanua

Try this

txt.setLines(number of lines);

In addition to the above suggestions - you might want to set the below additional parameters if you are not able to get this working

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

If you are changing the height of the edittext programmatically then you might want to request a layout too by calling requestLayout().

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!