web-dev-qa-db-fra.com

Créer un EditText multiligne par programme

J'essaie de créer un EditText multiligne par code. Voici ce que j'utilise:

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

Mais c'est toujours dans une seule ligne.

17
Ton

Cela devrait le faire

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

Vous pouvez aussi utiliser ceci:

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

La combinaison de toutes les réponses ci-dessus était la bonne réponse, donc la voici:

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

Incluez ceci dans votre code:

txt.setLines(maxlines);

maxlines sera le nombre maximum de lignes que vous souhaitez autoriser dans votre EditText.

3
Abhishek Sabbarwal

La combinaison qui a finalement fonctionné pour moi était:

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

Au moins partiellement, j'utilisais setInputType pour configurer plusieurs options différentes, ce qui était donc plus logique que d'autres.

1
David Berry

Sur mon téléphone, modifier imeOptions et inputType ne fait rien; le paramétrage de movementMethod et/ou scrollBarStyle va visser le composant tellement mal que l'utilisateur ne pourra sélectionner aucun texte; isVerticalScrollBarEnabled et isHorizontalScrollBarEnabled ne font rien; le mieux que je puisse faire est d'utiliser

txt.setSingleLine(false);

(txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); semble être inutile) mais cela n’affiche aucune barre de défilement dans le fichu EditText. Finalement, j'ai abandonné et je gonfle un extrait de mise en page chaque fois que j'ai besoin d'un EditText multiligne. Voici la mise en page:

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

Et voici l'extrait 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)

Le développement sur Android est nul.

1
Martin Vysny

Essaye ça

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

En plus des suggestions ci-dessus - vous pouvez définir les paramètres supplémentaires ci-dessous si vous ne parvenez pas à obtenir ces résultats.

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

Si vous modifiez la hauteur de l'edittext par programme, vous pouvez également demander une mise en page en appelant requestLayout (). 

0
Raju