5

Tengo una página bastante simple entrada en mi aplicación para Android, que contiene una cabecera, nombre de usuario de Vista de Texto, TextView contraseña, botón de inicio de sesión y un pie de imagen:Cómo evitar cambios en la IU de Android, cuando el teclado está activo o se cambia la orientación?

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" > 

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#ffffff" > 

    <!-- Header Starts --> 

    <LinearLayout 
     android:id="@+id/header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     > 

     <!-- Logo Start --> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/header" /> 
     <!-- Logo Ends --> 
    </LinearLayout> 

    <!-- Header Ends --> 

    <!-- Footer Start --> 
    <LinearLayout android:id="@+id/footer" 
    android:layout_width="fill_parent" 
    android:layout_height="90dip" 
    android:layout_alignParentBottom="true" 
    android:gravity="center"> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/footer" /> 
    </LinearLayout> 
    <!-- Footer Ends --> 

    <!-- Login Form --> 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="10dip" 
     android:layout_below="@+id/header" 
     > 

     <!-- Application Name Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/app_name" 
      android:gravity="center" 
      android:padding="10dip" 
      android:textSize="25dp" 
      android:textStyle="bold" 
     /> 

     <!-- Username Label --> 

     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="User Name" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/username" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:singleLine="true" /> 
     <!-- Password Label --> 

     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Password" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/password" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:password="true" 
      android:singleLine="true" /> 
     <!-- Login button --> 

     <Button 
      android:id="@+id/btnLogin" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dip" 
      android:text="Logon" /> 
     </LinearLayout> 
     <!-- Login Form Ends --> 

    </RelativeLayout> 
</ScrollView> 

Tengo dos problemas creo que están relacionados:

  1. Cuando el teclado está arriba, y me desplazo hacia abajo, veo que el pie de página de la imagen "se esconde" detrás del botón de inicio de sesión, en lugar de permanecer debajo de él.
  2. Lo mismo sucede cuando la pantalla está orientada horizontalmente.

Las cosas que he intentado:

  1. Ajuste en la actividad android:windowSoftInputMode="adjustPan", pero yo quiero ser capaz de desplazarse hacia abajo cuando aparezca el teclado, o android:windowSoftInputMode="adjustResize", o cualquier otro parámetro para el caso.
  2. Configuración marginBottom en el botón.

Ninguno de los dos funcionó. Agradecería cualquier ayuda.

Respuesta

1

terminé resolver esto mediante el uso de las capacidades RelativeLayout: añadí un id al LinearLayout del "Formulario de acceso", llamada "forma", y añade esta línea a la ImageView que estaba oculto detrás del botón : android: layout_below = "@ + id/form". Luego hizo algunos cambios cosméticos. Código completo a continuación:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:fillViewport="true" > 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#ffffff" > 

    <!-- Header Starts --> 
    <LinearLayout 
     android:id="@+id/header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center"> 

     <!-- Logo Start --> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/header" /> 
     <!-- Logo Ends --> 

    </LinearLayout> 
    <!-- Header Ends --> 

    <!-- Login Form --> 
    <LinearLayout 
     android:id="@+id/form" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="10dip" 
     android:layout_below="@+id/header"> 

     <!-- Application Name Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/app_name" 
      android:gravity="center" 
      android:padding="10dip" 
      android:textSize="25dp" 
      android:textStyle="bold"/> 

     <!-- Username Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="User Name" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/username" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:singleLine="true" /> 

     <!-- Password Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Password" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/password" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:password="true" 
      android:singleLine="true" /> 

     <!-- Login button --> 
     <Button 
      android:id="@+id/btnLogin" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dip" 
      android:text="Logon" /> 
    </LinearLayout> 
    <!-- Login Form Ends --> 

    <!-- Footer Start --> 
    <LinearLayout android:id="@+id/footer" 
     android:layout_width="fill_parent" 
     android:layout_height="90dip" 
     android:layout_alignParentBottom="true" 
     android:gravity="bottom|center" 
     android:paddingBottom="10dip" 
     android:layout_below="@+id/form" 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/footer" /> 

     </LinearLayout> 
     <!-- Footer Ends --> 

    </RelativeLayout> 

</ScrollView> 

Gracias.

1

Abra su archivo .xml de manifest.xml en su pestaña de actividad.

<activity 
      android:configChanges="keyboardHidden|orientation" 
      android:name=".testActivity" 
      android:label="@string/app_name"></activity> 
+1

¿También quisiste decir que debería escribir algo en el método onConfigurationChanged? Porque no sé qué cambiar cuando se cambia la configuración ... y solo escribir tu sugerencia no funciona ... Gracias – MichalK

0
<activity 
      android:configChanges="adjustPan" 
      android:name=".testActivity" 
      android:label="@string/app_name"></activity> 

Ver más acerca de "android: windowSoftInputMode". Modos disponibles here

Cuestiones relacionadas