2013-02-22 20 views
13

Próbuję utworzyć wielowierszowy EditText według kodu. To co mam użyć:Tworzenie edytora wielowierszowego EditText programowo

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

ale wciąż jest w jednej linii. Jakaś pomoc?

Odpowiedz

40

Należy to zrobić

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

Tak, proszę pana. Masz to! Działa świetnie. Gracias. – Ton

+0

jeśli setEms (int) jest wywoływana, to nie działa. –

3

uwzględnienie tego w kodzie:

txt.setLines(maxlines); 

maxlines będzie maksymalna liczba linii chcesz zezwolić w EditText.

0

Spróbuj

txt.setLines(number of lines); 
20

Możesz także użyć tego:

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

Połączenie, które ostatecznie pracował dla mnie było:

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

Co najmniej częściowo użyłem setInputType do skonfigurowania kilku różnych opcji, więc miało to więcej sensu niż niektóre inne możliwości.

10

Łącząc wszystkie powyższe odpowiedzi było poprawną odpowiedź tak tutaj jest:

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

Dziękuję, Android API jest okropny pod tym względem. Paski przewijania nie są dla mnie widoczne, ale to nie ma znaczenia, ponieważ przynajmniej tekst można wreszcie wprowadzić wielokierunkowo (wcześniej nie było przycisku Enter, lub przycisk Enter wstawiał spację zamiast nowej linii - jak to jest opóźnione). –

+0

Dzięki, ale teraz paski przewijania nie są widoczne, a tekstu nie można wybrać z jakiegoś powodu. –

+1

Brakuje tylko tutaj: textInput..setGravity (Gravity.TOP | Gravity.LEFT); –

0

na moim telefonie, zmiana imeOptions i InputType nic nie robi; ustawienie moveMethod i/lub scrollBarStyle tak mocno skręci komponent, że użytkownik nie będzie w stanie wybrać żadnego tekstu; isVerticalScrollBarEnabled i isHorizontalScrollBarEnabled nic nie robi; najlepsze co mogłem zrobić, to użyć

txt.setSingleLine(false); 

(txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); wydaje się być niepotrzebne), ale że nie będą wyświetlane żadne paski przewijania w EditText boga-cholera. Ostatecznie zrezygnowałem i nadmuchuję fragment kodu w dowolnym momencie, kiedy potrzebuję wielowierszowego EditText. Oto układ:

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

A oto fragment 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) 

Development na Androida ssie tak mocno.

Powiązane problemy