EditText: qué es, atributos y trabajo con campos de entrada en Android

Autor: IT Sectr Publicado: 2026-07-07 Tiempo de lectura: 9 min

EditText es un componente básico de Android diseñado para ingresar y editar texto en la interfaz de usuario. Hereda de TextView y permite la entrada de caracteres mediante teclados virtuales o físicos. EditText admite múltiples modos: texto de una o varias líneas, contraseñas, números, direcciones de correo electrónico y números de teléfono. Según Android Developers (2026), EditText se utiliza en más del 90% de las aplicaciones Android para crear formularios, campos de búsqueda, chats y pantallas de ingreso de datos.

Puntos clave

  • EditText es el componente básico de entrada de texto en Android, una subclase de TextView.
  • Modos de entrada — admite texto, números, contraseñas, email, teléfono y entrada multilínea.
  • Atributos XML — configuración mediante inputType, maxLines, hint, textColorHint y otros parámetros.
  • Listeners — TextWatcher para rastrear cambios y OnEditorActionListener para manejar acciones.
  • Material Design — TextInputLayout extiende EditText con etiqueta flotante y mensajes de error.

¿Qué es EditText en Android?

EditText es una clase del paquete android.widget que implementa un campo de texto interactivo para la entrada de datos del usuario. En la jerarquía de herencia de Android, EditText extiende TextView, por lo que hereda todas las propiedades de una etiqueta de texto, incluyendo la gestión de fuentes, colores y alineación. La principal diferencia entre EditText y TextView es la capacidad de editar contenido — el usuario puede ingresar, eliminar y modificar texto directamente en la interfaz.

Cada EditText está asociado con una instancia de Editable que almacena el texto ingresado y admite operaciones de inserción, eliminación y reemplazo. Al escribir, EditText gestiona automáticamente la posición del cursor, la selección de texto y un historial de cambios para deshacer/rehacer. Según la Android Developers Guide (2026), EditText también admite autocompletado a través de la clase AutoCompleteTextView, que hereda de EditText.

La arquitectura de EditText se basa en la separación del modelo (Editable), la vista (TextView) y el controlador (InputConnection). Al obtener el foco, EditText crea un InputConnection a través del cual el sistema de entrada pasa caracteres, pulsaciones de teclas y comandos de edición. Este mecanismo garantiza la compatibilidad con cualquier método de entrada — desde teclados virtuales hasta teclados Bluetooth físicos y entrada por voz.

kotlin
val editText = EditText(context).apply {
    hint = "Ingrese texto"
    inputType = InputType.TYPE_CLASS_TEXT
    maxLines = 1
    setTextColor(Color.parseColor("#000000"))
}

Atributos principales de EditText

EditText proporciona docenas de atributos para ajustar con precisión el comportamiento y la apariencia. Se pueden establecer tanto en diseños XML como mediante programación en Kotlin o Java. Los atributos se dividen en categorías: control de texto, restricciones, estilo visual e interacción con el teclado.

AtributoDescripciónValor de ejemplo
android:hintTexto de sugerencia mostrado en un campo vacío"Ingrese email"
android:inputTypeModo de entrada (texto, número, contraseña, etc.)textEmailAddress
android:maxLinesNúmero máximo de líneas3
android:maxLengthLongitud máxima del texto en caracteres100
android:textColorHintColor del texto de sugerencia#999999

El atributo android:hint es uno de los más importantes — le indica al usuario qué datos se esperan en el campo. Cuando se ingresa texto, la sugerencia se oculta automáticamente. La sugerencia no participa en el envío del formulario ni se guarda como valor del campo. Material Design recomienda usar TextInputLayout con etiqueta flotante en lugar de una sugerencia simple para un aspecto más moderno.

  • android:selectAllOnFocus — selecciona todo el texto al obtener el foco (útil para campos de búsqueda).
  • android:maxLength — limita la cantidad de caracteres ingresados, truncando el exceso.
  • android:lines — establece una altura fija del campo en líneas (a diferencia de minLines).
  • android:gravity — alineación del texto dentro del campo: left, center, top, etc.
xml
                <!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />

Modos de entrada y inputType

El atributo inputType determina qué tipo de teclado se mostrará al usuario y qué caracteres están permitidos para la entrada. Es una máscara de bits donde la clase de entrada (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) se combina con modificadores.

Cada modo de entrada no solo cambia la disposición del teclado sino que también afecta el procesamiento del texto: en modo numérico solo se permiten dígitos y separadores decimales, en modo email están disponibles el símbolo @ y las extensiones de dominio, y en modo teléfono se muestran dígitos y los símbolos +, #, *. Elegir el inputType correcto afecta críticamente la experiencia del usuario — un teclado inapropiado obliga a los usuarios a cambiar de modo, aumentando el tiempo de llenado del formulario en un 30–50%.

Según las Material Design Guidelines (2025), se recomienda usar el inputType más específico para cada campo: textPassword para contraseñas, numberDecimal para precios, phone para números de teléfono, textMultiLine para entrada multilínea. Esto acelera el llenado de formularios y reduce los errores de entrada.

kotlin
// Configuración programática de inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_AUTO_CORRECT

Listeners de EditText: TextWatcher y OnEditorActionListener

TextWatcher es una interfaz para rastrear cambios de texto en EditText en tiempo real. Contiene tres métodos: beforeTextChanged se llama antes de un cambio, onTextChanged se llama durante el cambio, afterTextChanged se llama después de que el cambio de texto se completa. TextWatcher se utiliza para validación de entrada, conteo de caracteres, búsqueda y autocompletado.

OnEditorActionListener maneja las acciones del usuario en el teclado: presionar Done (IME_ACTION_DONE), Search (IME_ACTION_SEARCH), Send (IME_ACTION_SEND), Next (IME_ACTION_NEXT) y otras. Este listener es especialmente útil para organizar la navegación del formulario — al presionar Next, el foco se mueve automáticamente al siguiente campo, y al presionar Done, se oculta el teclado y se realiza el envío.

Según el Android Developers Blog (2025), el uso adecuado de OnEditorActionListener con el atributo android:imeOptions permite crear formularios intuitivos sin botones de envío adicionales — el usuario llena los campos y presiona Done en el teclado, lo que activa el guardado o la búsqueda.

kotlin
// TextWatcher para validación de email
editText.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(s: Editable?) {
        val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
        editText.error = if (isValid) null else "Invalid email format"
    }
})

// OnEditorActionListener para envío de formulario
editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        submitForm()
        true
    } else false
}

Ejemplos de código con EditText

Veamos un ejemplo completo de creación de una pantalla de inicio de sesión utilizando EditText para ingresar email y contraseña. Este ejemplo muestra la configuración de inputType, validación mediante TextWatcher y manejo de la pulsación del botón de inicio de sesión.

Diseño XML de la pantalla de inicio de sesión

xml
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />

@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />

Configuración programática de EditText

kotlin
class LoginFragment : Fragment() {
    private lateinit var etEmail: EditText
    private lateinit var etPassword: EditText

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        etEmail = view.findViewById(R.id.etLoginEmail)
        etPassword = view.findViewById(R.id.etLoginPassword)

        etEmail.addTextChangedListener(emailWatcher)
        etPassword.setOnEditorActionListener { _, actionId, _ ->
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                performLogin()
                true
            } else false
        }
    }
}

Estilización de EditText

EditText admite personalización a través de atributos XML, temas y estilos. Se pueden cambiar el color del texto, el color de la sugerencia, el color del subrayado (backgroundTint), el estilo de fuente, el tamaño del texto y mucho más. Material Components proporciona el tema MaterialComponents.EditText con atributos personalizados que incluyen boxStrokeColor, boxBackgroundColor y endIconMode.

Para cambiar el color del subrayado de EditText, usa el atributo android:backgroundTint, que establece el color para los estados normal y de foco. En Material Design, el color del subrayado se gestiona a través de colorPrimary del tema. Para una personalización completa, puedes crear un drawable personalizado para el fondo en la carpeta res/drawable.

EstiloAtributoResultado
Color del textoandroid:textColorCambia el color del texto ingresado
Color de sugerenciaandroid:textColorHintCambia el color del texto de sugerencia
Subrayadoandroid:backgroundTintCambia el color de la línea bajo el campo
Tamaño de fuenteandroid:textSizeEstablece el tamaño del texto en sp
Fuenteandroid:fontFamilyAplica una fuente personalizada

Para crear un estilo consistente para todos los campos EditText en tu aplicación, se recomienda definir un estilo global en el tema. Material Design ofrece el estilo Widget.MaterialComponents.TextInputLayout.OutlinedBox, que se aplica automáticamente a todos los campos de entrada que usan TextInputLayout. Esto garantiza una apariencia coherente sin duplicar atributos en cada diseño.

Preguntas frecuentes

¿Cuál es la diferencia entre EditText y TextView?

EditText hereda de TextView y añade capacidades de edición de texto. TextView solo muestra texto, mientras que EditText permite al usuario ingresar, eliminar y modificar contenido. EditText también admite inputType, TextWatcher, gestión del cursor y otras funciones relacionadas con la entrada de datos.

¿Cómo restringir ciertos caracteres en EditText?

Usa InputFilter — una interfaz para filtrar caracteres de entrada. EditText admite la configuración de un array de filtros mediante el método setFilters(). Por ejemplo, InputFilter.LengthFilter limita la longitud del texto, mientras que un InputFilter personalizado puede restringir caracteres específicos, expresiones regulares o rangos Unicode.

¿Cómo obtener texto de EditText en código?

Llama a editText.text.toString() en Kotlin o editText.getText().toString() en Java. La propiedad text devuelve Editable, que se convierte a String mediante toString(). Siempre verifica si hay valores nulos o vacíos antes de usar el texto, especialmente en formularios con campos obligatorios.

¿Cómo hacer que EditText sea multilínea?

Establece el atributo android:inputType="textMultiLine" o añade programáticamente el flag InputType.TYPE_TEXT_FLAG_MULTI_LINE. En modo multilínea, EditText permite saltos de línea con Enter y se expande automáticamente en altura. Usa android:maxLines o android:minLines para limitar la altura.

¿Cómo deshabilitar EditText para edición?

Establece el atributo android:enabled="false" o llama a editText.isEnabled = false en código. Un EditText deshabilitado no responde al tacto, no puede obtener foco y se muestra en gris (estado deshabilitado). Una alternativa es usar android:focusable="false", que deshabilita la entrada pero conserva la apariencia normal.

Resumen

  • EditText es el componente básico de entrada de texto en Android, una subclase de TextView con soporte de edición.
  • inputType determina el modo del teclado y los caracteres permitidos: texto, número, email, teléfono, contraseña.
  • TextWatcher permite rastrear cambios de texto en tiempo real para validación y autocompletado.
  • OnEditorActionListener maneja acciones del teclado: Done, Search, Next, Send.
  • InputFilter restringe los caracteres de entrada y la longitud del texto mediante filtros personalizados.
  • Atributos como hint, maxLines, maxLength, textColorHint configuran el comportamiento y la apariencia.
  • Material Design mediante TextInputLayout proporciona un aspecto moderno con etiquetas flotantes y errores.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también