2013-04-17 8 views
6

voglio fare un app con un attività di accesso/layout simile a quello che Facebook app ha. Ciò che intendo è quando il campo di testo è focalizzato sulla tastiera virtuale, spinge l'intera vista verso l'alto ma non schiaccia un logo. Ho provato android:windowSoftInputMode="adjustPan/adjustResize" ma non è quello che stavo cercando di raggiungere.Creazione di layout di login come in facebook app per Android

Ho trovato la domanda this su SO forse renderà le cose più chiare, ma non ha soluzione al problema.

Ho anche provato vari tipi di layout, ma la tastiera morbida spinge solo il concentrato < EditText> up. Per favore guidami.

UPDATE:

enter image description hereenter image description here

enter image description hereenter image description here

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#DDDDDD"> 
    <RelativeLayout 
     android:height="0dp" 
     android:layout_weight="1" 
     android:layout_height="0dp" 
     android:layout_width="fill_parent" 
     android:background="#ff0000"> 
     <ImageView 
      android:layout_centerVertical="true" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent"></ImageView> 
    </RelativeLayout> 
    <RelativeLayout 
     android:height="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:layout_width="fill_parent" 
     android:background="#00ff00"> 
    </RelativeLayout> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#0000ff" 
     android:height="0dp" > 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:text="Log in" 
      /> 

     <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:padding="4dp" 
      android:hint="password" 
      android:inputType="textPassword" > 
     </EditText> 

     <EditText 
      android:id="@+id/editText1" 
      android:hint="login" 
      android:padding="4dp" 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" ></EditText> 
    </RelativeLayout> 

</LinearLayout> 

UPDATE soluzione di lavoro non posso incollo qui l'intero file XML, ma la struttura dovrebbe essere sufficiente . Basato sulla risposta di Gabe Sechan.

Layout{ 
    Layout top weight 1 
    Layout mid weight 1 
    Layout bot weight 1 
} 

layout del bambino hanno impostato:

android:layout_width="match_parent" 
android:layout_height="0dp" 
android:layout_weight="1" // should be changed accordingly to your layout design. 

Ed ecco un codice Java per l'attività (tastiera/down up):

View top, mid, bot; 
    final View activityRootView = findViewById(R.id.loginLayout); 
      activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
        new OnGlobalLayoutListener() { 
         @Override 
         public void onGlobalLayout() { 
          int heightDiff = activityRootView.getRootView() 
            .getHeight() - activityRootView.getHeight(); 
          if (heightDiff > 100) { //keyboard up 
           mid.setVisibility(View.INVISIBLE); 
           top.setLayoutParams(new TableLayout.LayoutParams(
             LayoutParams.MATCH_PARENT, 0, 0f)); 
           bot.setLayoutParams(new TableLayout.LayoutParams(
             LayoutParams.MATCH_PARENT, 0, 1f)); 

          } else {// keyboard down 
           // v.setVisibility(View.VISIBLE); 
           mid.setVisibility(View.VISIBLE); 
           top.setLayoutParams(new TableLayout.LayoutParams(
             LayoutParams.MATCH_PARENT, 0, 2f)); 
           bot.setLayoutParams(new TableLayout.LayoutParams(
             LayoutParams.MATCH_PARENT, 0, 3f)); 

          } 
         } 
        }); 

Sulla tastiera fino avete bisogno di cambiare pesi che si adattano al design della tastiera e alla tastiera tornano al default (layout che hai impostato tramite xml/java). Ho testato il codice su 2.3.xe su. E non dimenticate di utilizzare android:inputType="textFilter" per la password di accesso & EditText 's per rimuovere suggerimenti su ingresso e salvare alcuni pixel. Nel file manifest per l'attività android:windowSoftInputMode="adjustResize|stateHidden". stateHidden viene utilizzato in modo che la tastiera non si attivi quando l'attività viene caricata. Spero che sia d'aiuto. In bocca al lupo.

risposta

8

Lo stanno facendo con i layout relativi, adjustResize, e Android: layout_centerVertical. Fondamentalmente, hanno un layout lineare per il loro layout principale, con 3 layout relativi ugualmente ponderati al suo interno. Ciascuno è impostato su altezza 0dp, quindi occupano lo stesso terzo dello schermo. La parte superiore di RelativeLayout contiene il logo, centrato verticalmente. Il centro contiene i campi di accesso e il pulsante, centrati verticalmente uno sopra l'altro. Quello in basso contiene il testo del copyright, allineato in basso. Il risultato finale è che quando viene visualizzata la tastiera, i 3 layout relativi vengono ridimensionati per prendere 1/3 del nuovo schermo. Quindi i loro elementi sono centrati nel nuovo schermo.

Ricorda è necessario la modalità finestra adjustResize per ottenere questo, se si utilizza la panoramica che sarà solo muoversi su e il logo sarà scorrere fuori centro.

+0

Potete vedere il mio aggiornamento. Nella parte dell'app di Facebook che contiene i campi di accesso non viene ridimensionata, ma gli elementi superiore e inferiore vengono ridimensionati. Nei miei campi dell'app vengono uniti.Aiutami per favore. Ho scritto l'xml in base alla tua risposta. Nuovo per Android. –

+1

Nel layout di Facebook, poiché il fondo è quasi completamente vuoto, puoi dargli molto meno peso della sezione del campo di accesso, lasciandolo più grande a spese degli altri. Puoi giocare con i pesi delle 3 sezioni per portarlo dove vuoi. Probabilmente farei anche l'altezza di EditTexts e dei pulsanti wrap_content per salvare alcuni pixel. –

+0

Grazie, giocare con il peso risolto è quello di cui avevo bisogno. Sai come modificare il peso di una vista/layout a livello di codice? –

0

In Eclipse, andare su File | Nuovo | Altro e nella procedura guidata che segue, selezionare Attività Android, quindi nella pagina successiva selezionare LoginActivity dall'elenco delle attività. Questo ha il layout esatto di cui stai parlando, e puoi usarlo come framework. Usa una ScrollView per ottenere l'effetto che stai cercando.

+1

Non sono sicuro di Eclipse, ma non è corretto per Android Studio. – AlexKorovyansky

Problemi correlati