Дозволити багаторядковий режим перегляду EditText в Android?


Відповіді:


1175

За замовчуванням всі 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 замість того, щоб надсилати, коли я встановлюю вхідний тип textMultiLine та ім'яОпції для actionSend.
user484691

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

2
Варто зазначити одне, додавши inputTypeпринаймні заперечення linesта minLinesатрибути. У мене були inputType="phone"і атрибути рядків не мали ефекту
ono

2
Не використовуйте це. Викликає, IndexOutOfBoundsExceptionяк тільки ви щось набираєте черезandroid:inputType="textMultiLine"
Чіско

якщо для використання AppCompactTextView потрібен цей рядок android: inputType = "textMultiLine"
sourav pandit

260

Можливо, вам буде краще використовувати:

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

Це тому android:singleLine, що застаріло.


Відповідь Шардулів, безумовно, повинна працювати над сучасним Апісом. Оскільки вони видалили застарілу singleLineчастину своєї відповіді (давно). Що стосується самого питання, то це найважливіша частина їх відповіді.
Knossos

Не використовуйте це. Це викликає, IndexOutOfBoundsExceptionяк тільки ви щось набираєте. За замовчуванням багаторядкова зараз.
Чіско

@Chisko Атрибут XML не спричинить IndexOutOfBoundsException. Я не можу пригадати, коли змінився тип вводу за замовчуванням (чи це було навіть?), Але, мабуть, найкраще це тримати внаслідок зворотної сумісності.
Кноссос

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

42

Це працює для мене, насправді ці 2 атрибути є важливими: inputType та рядки . Крім того, вам може знадобитися смуга прокрутки, код нижче показує, як зробити її:

 <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/ , хоча сам веб-сайт мені не подобається. Якщо ви хочете, щоб багаторядкова НЕ хотіла зберегти кнопку введення як кнопку публікації, встановіть параметр "горизонтальне прокручування" listview на значення 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" />

а в розділі "Активність для видалення" натисніть наступний рядок користувача

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.