2011-01-13 13 views
6

Chcę utworzyć układ, z poziomymi liniowymi liniami na górze i na dole, wypełnieniem ListView w środku.Problem układu: jak umieścić coś na górze i na dole?

Jak zdefiniować plik main.xml.

Próbowałem utworzyć układ z poziomym LinearLayout na górze, TextView na dole, wypełnienie ListView w środku; jest w porządku. Ale po zmodyfikowaniu dolnego TextView do LinearLayout, dolny LinearLayout zniknie.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     > 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="50px" 
      android:layout_height="wrap_content" 
      /> 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="bottom" 
     > 
     <ListView 
      android:id="@+id/listbody" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      > 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
       /> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
       /> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

Ktoś może doradzić? Proszę o pomoc.

Odpowiedz

11

Spróbuj zawierająca cały zestaw w RelativeLayout:

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

    <LinearLayout 
     android:id="@+id/top_linear_layout_id" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" > 
    </LinearLayout> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/bottom_linear_layout_id" 
     android:layout_below="@id/top_linear_layout_id" /> 

    <LinearLayout 
     android:id="@+id/bottom_linear_layout_id" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" > 
    </LinearLayout> 
</RelativeLayout> 

Zmieniano z klejonki rzeczy.

+0

Teraz LinearLayout pokrywa się z ListView! Myślę, że powinno to być coś złego w określaniu LinearLayout na dole. – chow

+0

Nieszczególnie. Dla ListView dodać: \t ANDROID layout_height = "wrap_content" \t ANDROID layout_width = "fill_parent" \t ANDROID layout_below = "@ id/top_linear_layout_id" \t ANDROID layout_above = "@ + Id/bottom_linear_layout_id" Wraz z odpowiednimi identyfikatorami dla układów liniowych. – Estel

0

Problem polega na tym, że definiujesz oba w stosunku do rozmiaru zawartej w nich zawartości, ale jeśli połączona zawartość obu jest większa niż ekran, to jedna z nich będzie musiała pokrywać się z drugą, byłoby lepiej zdefiniować height_height przy użyciu bezwzględnego pomiaru w układzie liniowym.

3

Oto czego szukasz. Estel jest na dobrej drodze z RelativeLayout (chociaż można to zrobić za pomocą LinearLayout, myślę, że podejście RelativeLayout jest czystsze) , ale układ jest nieczynny Nieważne, sprawdź komentarz Estela, który mnie udowodnił. :) Najpierw powinieneś zdefiniować swój nagłówek, wyrównać go do góry; następnie zdefiniuj stopkę i dopasuj ją do dołu; wreszcie zadeklarować swój ListView, nadać jej wysokość fill_parent i ustaw go do układu powyżej stopce i pod nagłówkiem:

<?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/header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:alignParentTop="true" 
     > 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/footer" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:alignParentBottom="true" 
     > 
    </LinearLayout> 

    <ListView 
     android:id="@+id/listview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@id/footer" 
     android:layout_below="@id/header" 
     /> 
</RelativeLayout> 
+0

Ciekawe, jak duże znaczenie ma w tym przypadku zamówienie? Chociaż wyraźnie upewniamy się, że nie ma nakładania się w pozycjonowaniu żadnego z widżetów, czy kolejność rysowania nie staje się coraz bardziej zbędna? – Estel

+0

Czytanie tutaj: http://developer.android.com/guide/topics/ui/index.html#ViewHierarchia stwierdza, że ​​układ jest analizowany w kolejności. Więc jeśli ListView jest zadeklarowany przed układem stopki, zajmuje całe miejsce spod nagłówka, na dole ekranu. Następnie stopka zostanie narysowana na szczycie listy ListView, ponieważ ListView nie jest świadomy stopki w momencie jej analizy. Chcę powiedzieć, że czytałem to od wersji Androida 2.2, kolejność nie ma już znaczenia (ale nadal jest, jeśli kierujesz na poprzednie wersje), ale nie mogę teraz znaleźć ostatecznego odniesienia. – kcoppock

+0

Jedną z rzeczy, które znalazłem http://developer.android.com/resources/articles/ui-1.6.html, które mogą być istotne, jest to, że 1.6 umożliwia dalsze odniesienia do zasobów, które są zadeklarowane w dalszej części drzewa. Czy to właśnie masz na myśli? – Estel

0

Dzięki wszystkim za rady i kierunku RelativeLayout. Mogę to naprawić teraz.

muszę zdefiniować LinearLayout stopki przed ListView i określenie ListView jako android: layout_alignParentTop = "true" i Android: layout_above = "@ id/stopki"

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
    > 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="50px" 
      android:layout_height="wrap_content" 
      /> 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
     /> 
    </LinearLayout> 
    <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    > 
     <LinearLayout 
      android:id="@+id/footer" 
      android:orientation="horizontal" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_alignParentBottom="true" 
     > 

      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
       /> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
      /> 

     </LinearLayout> 
     <ListView 
      android:id="@+id/tablebody" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_above="@id/footer" 
     /> 
    </RelativeLayout> 
</LinearLayout> 
0

To z pewnością rozwiąże Twój problem :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <HorizontalScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 
      <TextView 
       android:textSize="12sp" 
       android:text="something here" 
       android:layout_width="50dp" 
       android:layout_height="wrap_content"/> 
      <TextView 
       android:textSize="12sp" 
       android:text="something here" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"/> 
     </LinearLayout> 
    </HorizontalScrollView> 
    <ListView 
     android:id="@+id/listbody" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 
    <HorizontalScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent"> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12sp" 
       android:text="50%"/> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12sp" 
       android:text="50%"/> 
     </LinearLayout> 
    </HorizontalScrollView> 
</LinearLayout> 
Powiązane problemy