Разрешить многострочное отображение в EditText в Android?


Ответы:


1176

По умолчанию все EditTextвиджеты в Android многоуровневые.

Вот пример кода:

<EditText
    android:inputType="textMultiLine" <!-- Multiline input -->
    android:lines="8" <!-- Total Lines prior display -->
    android:minLines="6" <!-- Minimum lines -->
    android:gravity="top|left" <!-- Cursor Position -->
    android:maxLines="10" <!-- Maximum Lines -->
    android:layout_height="wrap_content" <!-- Height determined by content -->
    android:layout_width="match_parent" <!-- Fill entire width -->
    android:scrollbars="vertical" <!-- Vertical Scroll Bar -->
/>

6
Есть ли способ установить inputType в textMultiLine и imeOptions для actionSend? Я вижу клавишу Enter на клавиатуре S4 вместо отправки, когда я устанавливаю inputType в textMultiLine и imeOptions в actionSend.
user484691

1
Для «textMultiLine и imeOptions» см stackoverflow.com/questions/5014219/...
Томка

2
Стоит отметить, что добавление inputTypeотрицательных атрибутов по крайней мере в атрибуты linesand minLines. У меня были inputType="phone"и атрибуты линий не имели никакого эффекта
ono

2
Не используйте это. Вызывает, IndexOutOfBoundsExceptionкак только вы наберете что-то из-заandroid:inputType="textMultiLine"
Чиско

если при использовании AppCompactTextView нужна эта строка android: inputType = "textMultiLine"
sourav pandit

260

Вы можете найти это лучше использовать:

<EditText 
...
android:inputType="textMultiLine"
/>

Это потому что android:singleLineустарела.


Ответ Шардулса, безусловно, должен работать на современном Apis. Так как они удалили устаревшую singleLineчасть своего ответа (давно). Что касается самого вопроса, это самая важная часть их ответа.
Кносс

Не используйте это. Вызывает, IndexOutOfBoundsExceptionкак только вы что-то печатаете. Многострочный теперь по умолчанию.
Чиско

@Chisko Атрибут XML не вызовет исключение IndexOutOfBoundsException. Я не могу вспомнить, когда изменился тип inputType по умолчанию (сделал это даже?), Но, вероятно, лучше оставить это в целях обратной совместимости.
Кносс,

1
@ Knossos хорошо, как это ни странно для вас, это для меня. Я буквально копировал код и каждый раз падал с каждой возможной комбинацией нескольких параметров, пока не удалил это. Пойди разберись.
Чиско

42

Это работает для меня, на самом деле эти 2 атрибута важны: inputType и lines . Кроме того, вам может понадобиться полоса прокрутки, код ниже показывает, как ее создать:

 <EditText
        android:id="@+id/addr_edittext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="top|left"
        android:inputType="textEmailAddress|textMultiLine"
        android:lines="20"
        android:minLines="5"
        android:scrollHorizontally="false"
        android:scrollbars="vertical" />

20

Вот как я применил приведенный ниже фрагмент кода, и он работает нормально. Надеюсь, это кому-нибудь поможет.

<EditText 
    android:id="@+id/EditText02"
    android:gravity="top|left" 
    android:inputType="textMultiLine"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:lines="5" 
    android:scrollHorizontally="false" 
/>

Ура! ...Спасибо.


11

Попробуйте это, добавьте эти строки в ваш текст редактора, я добавлю мои. убедитесь, что вы понимаете это

android:overScrollMode="always"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"

<EditText
    android:inputType="textMultiLine"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editText_newprom_description"
    android:padding="10dp"
    android:lines="5"
    android:overScrollMode="always"
    android:scrollbarStyle="insideInset"
    android:minLines="5"
    android:gravity="top|left"
    android:scrollbars="vertical"
    android:layout_marginBottom="20dp"/>

и на вашем Java-классе сделайте щелчок по списку для редактирования этого текста следующим образом, я добавлю мои, изменю имена в соответствии с вашими.

EditText description;
description = (EditText)findViewById(R.id.editText_newprom_description);

description.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                view.getParent().requestDisallowInterceptTouchEvent(true);
                switch (motionEvent.getAction() & MotionEvent.ACTION_MASK){
                    case MotionEvent.ACTION_UP:
                        view.getParent().requestDisallowInterceptTouchEvent(false);
                        break;
                }

                return false;
            }

        });

это прекрасно работает для меня


Спасибо вам! Вот как я сделал редактируемый текст прокручиваемым в режиме прокрутки.
Эсдрас Лопес


5

Все это хорошо, но не сработает, если у вас есть текст редактирования в представлении прокрутки верхнего уровня :) Возможно, наиболее распространенным примером является представление «Настройки», в котором столько элементов, что они выходят за пределы видимой области. В этом случае вы помещаете их все в вид прокрутки, чтобы сделать настройки прокручиваемыми. В случае, если вам нужно редактировать текст с многострочной прокруткой в ​​настройках, его прокрутка не будет работать.


5
 <EditText
           android:id="@id/editText" //id of editText
           android:gravity="start"   // Where to start Typing
           android:inputType="textMultiLine" // multiline
           android:imeOptions="actionDone" // Keyboard done button
           android:minLines="5" // Min Line of editText
           android:hint="@string/Enter Data" // Hint in editText
           android:layout_width="match_parent" //width editText
           android:layout_height="wrap_content" //height editText
           /> 

4

Чтобы отключить количество строк, ранее назначенных в теме, используйте атрибут xml: android:lines="@null"


4
android:inputType="textMultiLine"

Эта строка кода работает для меня. Добавьте этот код, который вы редактируете, в свой XML-файл.


3

Просто добавьте это android:inputType="textMultiLine" в XML-файл в соответствующем поле.


1

Я узнал об этом с http://www.pcsalt.com/android/edittext-with-single-line-line-wrapping-and-done-action-in-android/ , хотя сам сайт мне не нравится. Если вы хотите многострочное, НО хотите сохранить кнопку ввода в качестве кнопки публикации, установите «горизонтальную прокрутку» в просмотре списка на false.

android:scrollHorizontally="false"

Если это не работает в XML, делать это программно странно работает.

listView.setHorizontallyScrolling(false);


1
<EditText
                android:hint="Address"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:inputType="textMultiLine|textNoSuggestions"
                android:id="@+id/edittxtAddress"
                android:layout_marginLeft="@dimen/textsize2"
                android:textColor="@android:color/white"
                android:scrollbars="vertical"
                android:minLines="2"
            android:textStyle="normal" />

и в Activity для удаления "\ n" пользователь нажимает следующую строку

String editStr= edittxtAddress.getText().toString().trim();

 MyString= editStr.replaceAll("\n"," ");

1

если кто-то использует AppCompatEditText, вам нужно установить inputType = "textMultiLine", вот код, который вы можете скопировать


   <androidx.appcompat.widget.AppCompatEditText
        android:padding="@dimen/_8sdp"
        android:id="@+id/etNote"
        android:minLines="6"
        android:singleLine="false"
        android:lines="8"
        android:scrollbars="vertical"
        android:background="@drawable/rounded_border"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/_25sdp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="@dimen/_25sdp"
        android:autofillHints=""

        android:gravity="start|top"
        android:inputType="textMultiLine"
         />

для фона

   <?xml version="1.0" encoding="utf-8"?>
   <shape android:shape="rectangle" 
    xmlns:android="http://schemas.android.com/apk/res/android">
   <corners android:radius="@dimen/_5sdp"/>
   <stroke android:width="1dp" android:color="#C8C8C8"/>
   </shape>

0

Еще одна полезная вещь - использовать android:minHeightвместе с android:layout_height="wrap_content". Таким образом, вы можете установить размер редактирования, когда оно пустое, и когда пользователь вводит материал, оно растягивается в зависимости от того, сколько пользователь вводит, включая несколько строк.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.