ti-enxame.com

Criar um EditText de várias linhas programaticamente

Eu estou tentando criar um EditText de várias linhas por código. Isso é o que eu uso:

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

Mas ainda está em uma única linha.

17
Ton

Isso deve servir

txt.setSingleLine(false);
txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
51
Daniel López Lacalle

Você também pode usar isto:

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

Combinar todas as respostas acima foi a resposta correta, então aqui está:

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

Inclua isso no seu código:

txt.setLines(maxlines);

maxlines será o número máximo de linhas que você deseja permitir em seu EditText.

3
Abhishek Sabbarwal

A combinação que finalmente funcionou para mim foi:

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

Pelo menos parcialmente eu estava usando setInputType para configurar várias opções diferentes, então fazia mais sentido do que algumas das outras possibilidades.

1
David Berry

No meu telefone, alterar imeOptions e inputType não faz nada; definindo movementMethod e/ou scrollBarStyle irá estragar o componente tão mal que o usuário não poderá selecionar nenhum texto; isVerticalScrollBarEnabled e isHorizontalScrollBarEnabled não faz nada; o melhor que pude fazer é usar

txt.setSingleLine(false);

(txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); parece ser desnecessário), mas isso não mostrará nenhuma barra de rolagem no EditText. Por fim, desisti e estou aumentando o snippet de layout sempre que preciso de um EditText de várias linhas. Aqui está o 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"
/>

E aqui está o trecho de Anko:

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

Desenvolvimento no Android é uma droga tão difícil.

1
Martin Vysny

Tente isso

txt.setLines(number of lines);
0
Ariel Magbanua

Além das sugestões acima, você pode definir os parâmetros adicionais abaixo se não conseguir fazer isso funcionar

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

Se você estiver alterando a altura do texto de edição programaticamente, convém também solicitar um layout chamando requestLayout ().

0
Raju