2013-02-22 5 views
13

Я пытаюсь создать многострочный EditText по коду. Это то, что я использую:Создайте многострочный EditText программно

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

Но он по-прежнему в одной строке. Любая помощь?

ответ

40

Это должно сделать это

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

Да, сэр. Ты понял! Он отлично работает. Gracias. – Ton

+0

, если вызывается setEms (int), это не работает. –

3

Включите это в коде:

txt.setLines(maxlines); 

MAXLINES будет максимальное количество строк, которые вы хотите, чтобы в вашем EditText.

0

Попробуйте

txt.setLines(number of lines); 
20

Вы также можете использовать это:

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

Комбинация, которая, наконец, работал для меня:

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

По крайней мере, частично я использовал setInputType для настройки нескольких различных опций, поэтому он имел больше смысла, чем некоторые другие возможности.

10

Объединяя все выше ответы были правильный ответ, так вот оно:

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

Спасибо, API Android ужасен в этом отношении. Полоски прокрутки не видны для меня, но это не имеет значения, поскольку, по крайней мере, текст, наконец, может быть введен в многострочный режим (ранее не было кнопки Enter или кнопки ввода Enter вместо новой строки - насколько это замедлилось). –

+0

Спасибо, но теперь полосы прокрутки не видны, и по какой-то причине текст не выбирается. –

+1

Единственное, чего здесь не хватает: textInput..setGravity (Gravity.TOP | Gravity.LEFT); –

0

На моем телефоне, изменение imeOptions и inputType ничего не делает; установка motionMethod и/или scrollBarStyle будет сильно закручивать компонент так, чтобы пользователь не смог выбрать какой-либо текст; isVerticalScrollBarEnabled и isHorizontalScrollBarEnabled ничего не делает; лучшее, что я мог сделать, это использовать

txt.setSingleLine(false); 

(txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); представляется излишним), но не будут отображаться полосы прокрутки в бога-проклятый EditText. В конечном счете я сдался, и я раздуваю фрагмент макета в любое время, когда мне нужен многострочный EditText. Вот макет:

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

И вот Анко сниппет:

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) 

развития на Android сосет так трудно.

Смежные вопросы