5

Ho una pagina di accesso piuttosto semplice nella mia app Android, che contiene un'intestazione, nome utente TextView, la password TextView, pulsante Login e un piè di pagina immagine:Come evitare modifiche nell'interfaccia utente di Android, quando la tastiera è attiva o l'orientamento è cambiato?

<?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> 

Ho due problemi penso che sono correlati:

  1. Quando la tastiera è sollevata e si scorre verso il basso, vedo che il footer dell'immagine "si nasconde" dietro il pulsante di accesso, invece di rimanere al di sotto di esso.
  2. Lo stesso accade quando lo schermo è orientato orizzontalmente.

Le cose che ho provato:

  1. Impostazione nell'attività android:windowSoftInputMode="adjustPan", ma voglio essere in grado di scorrere verso il basso quando appare la tastiera, o android:windowSoftInputMode="adjustResize", o qualsiasi altro param per quella materia.
  2. Impostazione marginBottom nel pulsante.

Nessuno dei due ha funzionato. Apprezzerei qualsiasi aiuto.

risposta

1

ho finito per risolvere questo utilizzando le funzionalità RelativeLayout: ho aggiunto un id alla LinearLayout del "Login Form" di nome "forma", e ha aggiunto questa linea al ImageView che era nascosta dietro il pulsante : android: layout_below = "@ + id/form". Poi fatto alcune modifiche estetiche. Codice completo sotto:

<?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> 

Grazie.

1

Aprire il file manifest.xml .change nella scheda delle attività.

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

Intendevi anche che dovrei scrivere qualcosa nel metodo onConfigurationChanged? Perché non so cosa cambiare quando la configurazione è cambiata .. e solo scrivere il tuo suggerimento non funziona ... Grazie – MichalK

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

Vedere "Android: windowSoftInputMode". Modalità disponibili here

Problemi correlati