2010-12-13 12 views
20

Tengo un diseño que usa un EditText para permitir a los usuarios buscar en una base de datos y completar un ListView. EditText está a unos 2/3 del camino desde la parte superior de la pantalla (posicionado sobre un ImageView y seguido de texto introductorio).SoftKeyboard ocultar EditText

El problema es que el teclado oculto oculta EditText, por lo que el usuario puede ' T ver lo que está escribiendo. (Desactivé la sugerencia automática.)

He intentado LinearLayout, RelativeLayout, paddings y diferentes alineaciones/centrado, pero todavía no puedo hacer que funcione bien. EditText está oculto, se empuja fuera de la parte superior de la pantalla o se "aplasta" y distorsiona.

Sugerencias ???

Una posible solución consiste en mover 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 hacer que el teclado virtual se abra en pantalla completa (aunque no estoy seguro de cómo). Esto aún ocultará EditText, pero luego puedo volver a habilitar la autosugestión para que el usuario pueda ver lo que está escribiendo ... más o menos ... porque solo puede ver las sugerencias para lo que está escribiendo.

Aquí está mi último intento. Ver "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> 
+0

Así es como resolvió mi problema http://stackoverflow.com/a/29408773/3595514 – Rajendra

Respuesta

56

Lo que estás buscando es el atributo Actividad windowSoftInputMode. Se establece esto en su archivo AndroidManifest.xml, y darle un valor tales como:

  • adjustResize: "La ventana principal de la actividad siempre se redimensiona para hacer espacio para el teclado en pantalla en la pantalla."

  • adjustPan: "La ventana principal de la actividad no cambia de tamaño para dejar espacio para el teclado virtual, sino que el contenido de la ventana se panoramiza automáticamente para que el enfoque actual no quede oculto por el teclado y los usuarios siempre pueden ver están escribiendo. Esto generalmente es menos conveniente que cambiar el tamaño, porque el usuario puede necesitar cerrar el teclado virtual para acceder e interactuar con partes oscuras de la ventana ".

adjustResize probablemente funcione para usted, siempre que ajuste el diseño en un ScrollView. Puede tener efectos negativos si tiene una imagen de mapa de bits en segundo plano, ya que también se redimensionará, en cuyo caso puede usar adjustPan.

<activity android:windowSoftInputMode="adjustResize" /> 

o

<activity android:windowSoftInputMode="adjustPan" /> 

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

+5

no funciona para mí en un Fragmento como hijo de FragmentActivity. – Bobbelinio

+0

esto no funciona cuando la aplicación se está ejecutando en modo de pantalla completa –

1

tratar de darle a la edición de texto de un layout_weight (es decir layout_weight = 1), esto puede tener otros efectos en los otros elementos de diseño que puede que tenga que trabajar a través de, pero esto puede ayudar a mantenerla visible cuando teclado en pantalla aparece

13

Lo que funcionó para mí es eliminar mi LinearLayout de más alto nivel en un scrollView (el ScrollView solo puede tener un elemento secundario). Esto permitió que toda la actividad/formulario se desplazara hacia arriba y no saturara el texto EditText en foco.

En primer lugar, me puse en mi actividad:

<activity android:windowSoftInputMode="adjustPan" /> 

Entonces hice lo 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> 
+0

No funcionó para mí en ICS. ¿Alguna idea de si agregar stateHidden a windowSoftInputMode podría estar causando este problema? –

+0

+1 ¡Por fin! El 'Scrollview' fue la clave para mí. ¡Gracias! – rendon

+0

no funciona para mí en un Fragmento como un elemento secundario de FragmentActivity. – Bobbelinio

2

sólo tiene que utilizar en el manifiesto siguiente ...

<activity 
     android:windowSoftInputMode="adjustPan">