2011-05-04 17 views
21

Çocukken üç doğrusal çıkışlı bir röportaj var. Sonuncusu sabit bir yüksekliğe sahip ve android: layout_alignParentBottom "true" olarak ayarlanmış. Orta olanı ilkinin altına doğru yerleştirilirken, ekranın alt kısmına kadar uzanır, böylece alt kısmı üçüncü tarafından üst üste gelir.Göreli yerleşimde kalan boşluk doldurma doğrusal nasıl yapılır?

Neyin var?

Teşekkür

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

Yani ne istiyorsun? – ingsaurabh

cevap

11

Nooo eklemek için ikinci LinearLayout bir id eklemek gerekir ... çözüm çok daha kolaydır! İkinci lineer mizanpajın üçüncü olanın üstünde olması gerektiğini söylemek istediğinizi söylemeyi unutmuştunuz :) Evet, ikinci lineer mizanpajı android:layout_below="@+id/category" ve android:layout_above="@+id/nav_bar" BOTH olmalıdır. Test ettim ve işe yarıyor.

Ama tabii ki, sadece zor olacak aynı sonuçları arşive ağırlıkları kullanabilirsiniz

... bahsettiğim değişikliği ile

XML'niz (Tutulma bunu test):

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

Sen çocuk düzenleri göreli boyutlarını kontrol etme düzeni ağırlıklar kullanarak deneyebilirsiniz. Düzen ağırlıklarının kullanımı hakkında bilgi veren bir article on my blog bulunmaktadır.

Bir örnek olarak, bu deneyin: RelativeLayout bir LinearLayout ile ikame edilmiştir, bağıl konum etiketlerinin tüm kaldırılmış

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

ve layout_weight özelliği olan merkeze LinearLayout eklendi Mevcut alanı doldurmak için streç neden olur.

1

Sen

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

ve üçüncü düzeninde

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

Sadece bunu eklemek için, neden 3. LinearLayout ayrıca xmlns: android etiketi bildiriyor? Bunu sadece kök nesnesinde yaptın sandım. – Klaus

+0

Bunu görmedim :) Sadece kopyala/yapıştır yap, ama haklısın. Orada ne yapıyor? – Bastaix