2011-05-04 4 views
21

Mam relatywną wersję z trzema liniowymi układankami jako dzieci. Ten ostatni ma stałą wysokość i ma android: layout_alignParentBottom ustawiony na "true". Podczas gdy środkowa jest prawidłowo umieszczona pod pierwszą, przesuwa się tak daleko, jak dolna część ekranu, tak że jej dolna część jest zachowana na trzecią.Jak zrobić liniowe wypełnienie pozostającej przestrzeni we względnej grze?

Co jest nie tak?

Dzięki

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

co chcesz? – ingsaurabh

Odpowiedz

11

nooo ... rozwiązanie jest znacznie prostsze! Zapomniałeś powiedzieć, że chcesz powiedzieć, że drugi układ liniowy powinien być powyżej trzeciego :) Tak, drugi układ liniowy musi mieć OBU android:layout_below="@+id/category" i android:layout_above="@+id/nav_bar". Testowałem to i to działa.

Ale oczywiście można użyć wagi do archiwizacji tych samych wyników, to tylko będzie trudniej ...

Twój XML ze zmianą wspominałem (testowałem go w 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

Można spróbować za pomocą wag układu kontrolować względne rozmiary układów podrzędnych. Istnieje article on my blog, który podaje pewne informacje na temat zastosowania grubości układu.

Na przykład, należy to:

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

RelativeLayout został zastąpiony przez LinearLayout wszystkie względnych znaczników pozycjonowania zostały usunięte, a atrybut layout_weight został dodany do środka LinearLayout które spowodują spowodować rozciągnięcie, aby wypełnić dostępną przestrzeń.

1

Należy dodać identyfikator do drugiego 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> 

aw trzecim układ dodać 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

Żeby dodać do tego, dlaczego 3rd LinearLayout również deklaruje tag xmlns: android? Myślałem, że zrobiłeś to tylko w obiekcie głównym? – Klaus

+0

Nie widziałem tego :) Właśnie zrobiłem kopiuj/wklej, ale masz rację. Co tam robi? – Bastaix

Powiązane problemy