2013-02-22 7 views
13

Sto provando a creare un EditText multilinea per codice. Questo è quello che uso:Creare un EditText multilinea programmaticamente

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

ma è ancora in una sola riga. Qualsiasi aiuto?

risposta

40

Questo dovrebbe farlo

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

Sì signore. Avete capito bene! Funziona alla grande. Gracias. – Ton

+0

se viene chiamato setEms (int), questo non funziona. –

3

Includi questo nel codice:

txt.setLines(maxlines); 

maxLines sarà il numero massimo di righe che si desidera consentire nel vostro EditText.

0

Prova questo

txt.setLines(number of lines); 
20

È inoltre possibile utilizzare questo:

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

La combinazione che finalmente ha funzionato per me è stato:

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

Almeno parzialmente stavo usando setInputType per la configurazione di diverse opzioni, quindi ha più senso di alcune delle altre possibilità.

10

Combinando tutte le risposte di cui sopra è stata la risposta corretta ecco che è:

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

Grazie, l'API di Android è orribile in questo senso. Le barre di scorrimento non sono visibili per me, ma non importa dal momento che almeno il testo è finalmente in grado di essere immesso in modo multi-linea (in precedenza non c'era il pulsante Invio, o il pulsante Invio inserito spazio invece di una nuova linea - quanto è ritardato questo). –

+0

Grazie, ma ora le barre di scorrimento non sono visibili e il testo non è selezionabile per qualche motivo. –

+1

L'unica cosa che manca qui è: textInput..setGravity (Gravity.TOP | Gravity.LEFT); –

0

sul mio cellulare, cambiando imeOptions e InputType non fa nulla; setting movementMethod e/o scrollBarStyle avvitano il componente in modo così grave che l'utente non sarà in grado di selezionare alcun testo; isVerticalScrollBarEnabled e isHorizontalScrollBarEnabled non fa nulla; il meglio che potessi fare è usare

txt.setSingleLine(false); 

(txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); sembra essere inutile), ma che non visualizza i barre di scorrimento nella EditText dio-maledetto. Alla fine ho rinunciato e sto gonfiando uno snippet di layout ogni volta che ho bisogno di un EditText su più righe. Ecco il 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" 
/> 

Ed ecco Anko frammento:

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) 

sviluppo su Android fa schifo così difficile.