2013-02-22 14 views
13

Ich versuche, eine mehrzeilige EditText nach Code zu erstellen. Dies ist, was ich benutze:Erstellen Sie eine mehrzeilige EditText programmatisch

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

Aber es ist immer noch in einer einzigen Zeile. Irgendeine Hilfe?

Antwort

40

Dies sollte es tun

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

Ja, Sir. Du hast es! Es funktioniert großartig. Gracias. – Ton

+0

Wenn setEms (int) aufgerufen wird, funktioniert das nicht. –

3

Fügen Sie diese in Ihrem Code:

txt.setLines(maxlines); 

maxlines wird die maximale Anzahl der Zeilen, die Sie in Ihrem EditText zulassen möchten sein.

0

Versuchen Sie, diese

txt.setLines(number of lines); 
20

Sie können dies auch nutzen:

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

Die Kombination, die schließlich für mich gearbeitet wurde:

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

Zumindest teilweise verwendete ich setInputType für die Konfiguration mehrerer verschiedener Optionen, so dass es sinnvoller als einige der anderen Möglichkeiten war.

10

alle oben genannten Antworten Kombination war die richtige Antwort so ist es hier:

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

Vielen Dank, die Android API ist in dieser Hinsicht schrecklich. Die Scrollbalken sind für mich nicht sichtbar, aber das spielt keine Rolle, da der Text schließlich mehrzeilig eingegeben werden kann (zuvor gab es keine Enter-Schaltfläche oder die Eingabetaste anstelle einer neuen Zeile.) wie zurückgeblieben ist das). –

+0

Danke, aber jetzt sind die Bildlaufleisten nicht sichtbar und der Text ist aus irgendeinem Grund nicht wählbar. –

+1

Das einzige, was hier fehlt ist: textInput..setGravity (Gravity.TOP | Gravity.LEFT); –

0

auf meinem Handy, Ändern imeOptions und input tut nichts; Wenn Sie motionMethod und/oder scrollBarStyle setzen, wird die Komponente so stark verschraubt, dass der Benutzer keinen Text mehr auswählen kann. isVerticalScrollBarEnabled und isHorizontalScrollBarEnabled tut nichts; das Beste, was ich tun könnte, ist

txt.setSingleLine(false); 

(txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); scheint nicht notwendig zu sein) zu verwenden, aber das wird keine Bildlaufleisten in dem Gott verdammt EditText nicht angezeigt werden soll. Letztendlich gab ich auf und ich befülle immer einen Layout-Ausschnitt, wenn ich einen mehrzeiligen EditText benötige. Hier ist das 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" 
/> 

Und hier ist Anko Schnipsel:

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) 

Entwicklung auf Android saugt so hart.

Verwandte Themen