¿Permitir varias líneas en la vista EditText en Android?

Respuestas:

1176

Por defecto, todos los EditTextwidgets en Android son multilínea.

Aquí hay un código de muestra:

<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 -->
/>
Shardul
fuente
66
¿Hay alguna manera de tener inputType establecido en textMultiLine e imeOptions en actionSend? Veo una tecla Intro en el teclado S4 en lugar de enviar cuando configuro inputType en textMultiLine e imeOptions en actionSend.
user484691
1
Para "textMultiLine e imeOptions", consulte stackoverflow.com/questions/5014219/…
TOMKA
2
Una cosa a tener en cuenta, agregar un inputTypeanula al menos los atributos linesy minLines. Tuve inputType="phone"y los atributos de líneas no tuvo ningún efecto
ono
2
No uses esto. Causa una IndexOutOfBoundsExceptiontan pronto como escribe algo porandroid:inputType="textMultiLine"
Chisko
si usa AppCompactTextView necesita esta línea android: inputType = "textMultiLine"
sourav pandit
260

Puede que le resulte mejor usar:

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

Esto se debe a que android:singleLineestá en desuso.

Knossos
fuente
La respuesta de Sharduls ciertamente debería funcionar en las Apis modernas. Desde que eliminaron la singleLineparte obsoleta de su respuesta (hace mucho tiempo). Con respecto a la pregunta en sí, esa es la parte más importante de su respuesta.
Knossos
No uses esto. Causa una IndexOutOfBoundsExceptiontan pronto como escribe algo. Multilínea ahora es el valor predeterminado.
Chisko
@Chisko Un atributo XML no causaría una IndexOutOfBoundsException. No recuerdo cuándo cambió el inputType predeterminado (¿lo hizo?), Pero probablemente sea mejor mantenerlo por razones de compatibilidad con versiones anteriores.
Knossos
1
@Knossos bueno, tan extraño como es para ti es para mí. Literalmente copié y pegué el código y me bloqueé cada vez con todas las combinaciones posibles de varios parámetros hasta que lo eliminé. Imagínate.
Chisko
42

Esto funciona para mí, en realidad estos 2 atributos son importantes: inputType y líneas . Además, es posible que necesite una barra de desplazamiento, el siguiente código muestra cómo hacer una:

 <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" />
acústico
fuente
20

Así es como apliqué el fragmento de código a continuación y funciona bien. Espero que esto ayude a alguien.

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

¡Salud! ...Gracias.

Nandagopal T
fuente
11

Intente esto, agregue estas líneas a su vista de edición de texto, agregaré las mías. asegúrate de entenderlo

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

y en su clase de Java haga clic en la lista para hacer clic en este texto de edición de la siguiente manera, agregaré los nombres míos y chane de acuerdo con los suyos.

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

        });

Esto funciona bien para mi

Chathura Jayanath
fuente
¡Gracias! Así es como hice un texto de edición desplazable dentro de una vista desplazable.
Esdras López el
5

Todo esto es bueno, pero no funcionará en caso de que tenga su texto de edición dentro de la vista de desplazamiento del nivel superior :) Quizás el ejemplo más común es la vista "Configuración" que tiene tantos elementos que van más allá del área visible. En este caso, los coloca a todos en la vista de desplazamiento para hacer que la configuración se pueda desplazar. En caso de que necesite texto de edición desplazable de varias líneas en su configuración, su desplazamiento no funcionará.

Cynichniy Bandera
fuente
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
           /> 
Yogesh Sarvaiya
fuente
4

Para deshabilitar la cantidad de líneas que se asignaron previamente en el tema, use el atributo xml: android:lines="@null"

Oleg Bozhko
fuente
4
android:inputType="textMultiLine"

Esta línea de código me funciona. Agregue este código que edita el texto en su archivo xml.

Yldirim
fuente
3

Simplemente agregue esto android:inputType="textMultiLine" en el archivo XML en el campo relevante.

Dinith
fuente
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" />

y en la Actividad para eliminar "\ n", el usuario presiona nextline

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

 MyString= editStr.replaceAll("\n"," ");
Kapil Parmar
fuente
1

si alguien está usando AppCompatEditText, entonces necesita establecer inputType = "textMultiLine" aquí está el código que puede copiar


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

para el fondo

   <?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>
sourav pandit
fuente
0

Otra buena cosa que hacer es usar android:minHeightjunto con android:layout_height="wrap_content". De esta manera, puede establecer el tamaño de la edición cuando está vacía, y cuando el usuario ingresa cosas, se estira según la cantidad de entradas del usuario, incluidas varias líneas.

en vez de
fuente