2011-05-04 13 views
21

Ho una relazione con tre linearlayouts da bambini. L'ultimo ha un'altezza fissa e ha Android: layout_alignParentBottom impostato su "true". Mentre quello centrale è posizionato correttamente sotto il primo, arriva fino alla parte inferiore dello schermo, in modo che la sua parte inferiore sia sovrapposta alla terza.Come fare una riproduzione lineare riempiendo lo spazio rimanente in un relativelayout?

Cosa c'è che non va?

Grazie

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

    <LinearLayout 
     android:id="@+id/category" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:layout_alignParentTop="true" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/back_btn" 
      android:layout_width="29dp" 
      android:layout_height="34dp" 
      android:layout_gravity="center_vertical" 
      android:src="@drawable/red_arrow_left" /> 

     <TextView 
      android:id="@+id/cat_name" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:gravity="center" 
      android:textSize="20sp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/category" 
     android:layout_marginTop="10dp" 
     android:orientation="horizontal" > 

     <ListView 
      android:id="@+id/android:list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@android:color/white" 
      android:cacheColorHint="@android:color/white" /> 

     <TextView 
      android:id="@+id/android:empty" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@android:color/white" 
      android:cacheColorHint="@android:color/white" 
      android:padding="10dp" 
      android:text="@string/no_item" /> 
    </LinearLayout> 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/nav_bar" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_alignParentBottom="true" 
     android:orientation="horizontal" > 
    //stuff 

    </LinearLayout> 
</RelativeLayout> 
+0

quindi cosa vuoi? – ingsaurabh

risposta

11

Nooo ... la soluzione è molto più semplice! Hai dimenticato di dire che vuoi dire che il secondo layout lineare dovrebbe essere sopra il terzo :) Sì, il secondo layout lineare deve avere ENTRAMBI android:layout_below="@+id/category" e android:layout_above="@+id/nav_bar". L'ho provato e funziona.

Ma, naturalmente, è possibile utilizzare i pesi per archiviare gli stessi risultati, è solo sarà più difficile ...

tuo XML con il cambiamento che ho citato (provato in Eclipse):

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

    <LinearLayout 
     android:id="@+id/category" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:layout_alignParentTop="true" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/back_btn" 
      android:layout_width="29dp" 
      android:layout_height="34dp" 
      android:layout_gravity="center_vertical" 
      android:src="@drawable/red_arrow_left" /> 

     <TextView 
      android:id="@+id/cat_name" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:gravity="center" 
      android:textSize="20sp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@+id/nav_bar" 
     android:layout_below="@+id/category" 
     android:layout_marginTop="10dp" 
     android:orientation="horizontal" > 

     <ListView 
      android:id="@+id/android:list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@android:color/white" 
      android:cacheColorHint="@android:color/white" /> 

     <TextView 
      android:id="@+id/android:empty" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@android:color/white" 
      android:cacheColorHint="@android:color/white" 
      android:padding="10dp" 
      android:text="@string/no_item" /> 
    </LinearLayout> 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/nav_bar" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_alignParentBottom="true" 
     android:orientation="horizontal" > 
//stuff 

    </LinearLayout> 
</RelativeLayout> 
31

Si potrebbe provare a utilizzare pesi di layout per controllare le dimensioni relative dei layout bambino. C'è uno article on my blog che fornisce alcune informazioni sull'uso dei pesi di layout.

Come esempio, provate questo:

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

    <LinearLayout 
     android:id="@+id/category" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/back_btn" 
      android:layout_width="29dp" 
      android:layout_height="34dp" 
      android:layout_gravity="center_vertical" /> 

     <TextView 
      android:id="@+id/cat_name" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:gravity="center" 
      android:textSize="20sp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/category" 
     android:layout_marginTop="10dp" 
     android:layout_weight="1" 
     android:orientation="horizontal" > 

     <ListView 
      android:id="@+id/android:list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@android:color/white" 
      android:cacheColorHint="@android:color/white" /> 

     <TextView 
      android:id="@+id/android:empty" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@android:color/white" 
      android:cacheColorHint="@android:color/white" 
      android:padding="10dp" 
      android:text="no_item" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/nav_bar" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:orientation="horizontal" > 
    //stuff 

    </LinearLayout> 
</LinearLayout> 

Il RelativeLayout è stato sostituito da un LinearLayout, tutti i relativi tag di posizionamento sono state rimosse, e un attributo layout_weight è stato aggiunto al centro LinearLayout che sarà perché si allunghi per riempire lo spazio disponibile.

1

Si dovrebbe aggiungere un id alla tua seconda LinearLayout

<LinearLayout android:orientation="horizontal" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"   
    android:layout_below="@+id/category" android:layout_marginTop="10dp" 
    android:@+id/YOUR_ID> 

e nel terzo layout di aggiungere android:[email protected]/YOUR_ID

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_bar" 
    android:[email protected]/YOUR_ID 
    android:orientation="horizontal" android:layout_width="fill_parent"   
    android:layout_height="40dp" android:layout_alignParentBottom="true"> 
+0

Giusto per aggiungere a questo, perché il terzo LinearLayout dichiara anche il tag xmlns: android? Ho pensato che l'hai fatto solo nell'oggetto root? – Klaus

+0

Non l'ho visto :) Ho appena fatto una copia/incolla, ma hai ragione. Cosa ci fa lì? – Bastaix

Problemi correlati