Ocultar SoftKeyboard EditText

Tengo una disposición que utiliza un EditText para dejar a usuarios buscar una base de datos y poblar un ListView. El EditText está cerca de 2/3 de la manera de la tapa de la pantalla (colocada sobre un ImageView, y seguida por un cierto texto de la introducción).

El problema es que el teclado virtual oculta el EditText, por lo que el usuario no puede ver lo que está escribiendo. (Desactivé la auto-sugerencia.)

He intentado LinearLayout, RelativeLayout, rellenos, y diferentes alineaciones / centralizaciones, pero todavía no puedo conseguir que funcione bien. El EditText se oculta, se empuja de la parte superior de la pantalla, o obtener "squished" y distorsionado.

Sugerencias ???

Una solución posible es mover el EditText a la parte superior de la pantalla. Sin embargo, esto se desvía del diseño gráfico que me dieron.

Otra solución posible es para mí hacer que el teclado suave abierto en pantalla completa (no estoy seguro de cómo, aunque). Esto seguirá ocultando el EditText, pero luego puedo volver a habilitar la auto-sugerencia para que el usuario pueda ver lo que está escribiendo … tipo de … porque sólo puede ver las sugerencias de lo que está escribiendo.

Aquí está mi último intento. Consulte "introFrame".

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/titleContainer" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:text="@string/title_string" android:textSize="15sp" android:textColor="#FFFFFF" android:textStyle="bold" android:paddingLeft="5dp" android:layout_height="fill_parent" android:layout_width="wrap_content" /> </LinearLayout> <FrameLayout android:id="@+id/introFrame" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" > <ImageView android:src="@drawable/main_search_image" android:scaleType="center" android:layout_gravity="center" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingTop="140dp" > <LinearLayout android:id="@+id/introSearchContainer" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" > <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <EditText android:id="@+id/intro_search_box" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint=" Enter keyword " android:imeOptions="actionGo" android:inputType="textFilter" android:maxLines="1" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/intro_search_button" android:background="@drawable/custom_button_go" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> <TextView android:text="@string/search_intro" android:textSize="15sp" android:textColor="#FFFFFF" android:layout_height="wrap_content" android:layout_width="fill_parent" /> </LinearLayout> </FrameLayout> <LinearLayout android:id="@+id/listContainer" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/itemlist" android:layout_width="wrap_content" android:layout_height="wrap_content" android:cacheColorHint="#00000000" /> <TextView android:text="No data found" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:textSize="16sp" android:textColor="#FFFFFF" android:id="@+id/android:empty" /> </LinearLayout> </LinearLayout> 

Lo que buscas es el atributo windowSoftInputMode la actividad. Establece esto en su archivo AndroidManifest.xml y le da un valor como:

  • adjustResize : "La ventana principal de la actividad siempre se redimensiona para hacer espacio para el teclado adjustResize en la pantalla".
  • adjustPan : "La ventana principal de la actividad no se redimensiona para hacer espacio para el teclado virtual, sino que el contenido de la ventana se cuelga automáticamente para que el foco actual no sea oscurecido por el teclado y los usuarios siempre puedan ver lo que están escribiendo. Es generalmente menos deseable que el redimensionamiento, porque el usuario puede necesitar cerrar el teclado suave para llegar e interactuar con partes oscurecidas de la ventana ".

AdjustResize probablemente funcionará para usted, siempre y cuando envuelva el diseño en ScrollView. Puede tener efectos negativos si tiene una imagen de mapa de bits en segundo plano, ya que también se cambiará de tamaño, en cuyo caso puede que desee utilizar adjustPan en su lugar.

 <activity android:windowSoftInputMode="adjustResize" /> 

o

 <activity android:windowSoftInputMode="adjustPan" /> 

Más información está disponible en el enlace anterior.

Lo que ha funcionado para mí es eliminar mi LinearLayout de nivel más alto en un scrollView (el ScrollView sólo puede tener un hijo). Esto permitió que toda la actividad / forma para desplazarse hacia arriba y no desorden el EditText en el enfoque.

Primero, me puse en mi actividad:

 <activity android:windowSoftInputMode="adjustPan" /> 

Entonces hice la cosa ScrollView que estoy hablando:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- STUFF --> </LinearLayout> </ScrollView> 

Sólo use el siguiente en manifiesto …

  <activity android:windowSoftInputMode="adjustPan"> 

Intente darle al texto de edición un layout_weight (es decir, layout_weight = 1), esto puede tener algunos otros efectos en los otros elementos de diseño que puede que tenga que trabajar, pero esto puede ayudarlo a permanecer visible cuando el teclado virtual aparece

  • Posicionamiento de EditText por encima del teclado
  • Los valores de EditText en Android Fragment no se actualizan
  • ¿Cómo puedo tener tanto una vuelta como una clave hecha en el teclado virtual de un EditText?
  • ¿Cómo evitar cortar / copiar / pegar en teléfono inteligente después de puerto de rotación para aterrizar en Android4.X?
  • Android: Ocultar el teclado en una pulsación de tecla "Hecho" sobreestablecida de EditText
  • Android IME, establece la posición del cursor en EditText
  • Permitir sólo 1 carácter en EditText y siempre sobrescribir cuando el usuario de entrada
  • Cómo limitar el texto en números sólo de 0-59 en Editar texto en Android?
  • Detectar el botón de borrado en el teclado virtual
  • Textwatcher no funciona en KitKat para el número como inputType
  • TextWatcher.afterTextChanged tiene cadena incorrecta después de retroceso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.