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.)
- Eliminar todo Spannable con retroceso
- ¿Por qué edittext es hide behinde softkeyboard
- La acción del método de entrada de EditText no funciona cuando se establece imeActionLabel
- Cómo cambiar el color de etiqueta flotante de TextInputLayout
- Agregar EditText a la barra de herramientas
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>
- El teclado suave oculta la mitad de EditText
- Android Edittext- Expansión de vanos
- Cómo abrir el teclado de Android en modo de voz de forma programática?
- Cambiar fuente de la etiqueta flotante EditText y TextInputLayout
- EditText lineSpacingExtra emisión
- Android: compruebe si EditText está vacío cuando se establece InputType en Número / Teléfono
- Android EditText fuerza el teclado numérico pero permite caracteres no numéricos
- Cómo mostrar el teclado virtual automáticamente cuando EditText recibe el foco
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 tecladoadjustResize
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
- Appcompat "java.lang.IllegalArgumentException: el parámetro debe ser un descendiente de esta vista" en ViewGroup.offsetRectBetweenParentAndChild
- Cómo obtener el ancho y la altura de la imagen?