2013-12-10 15 views
7

W poniższym xml, próbuję narysować układ, który zawiera dwa bloki (LinearLayout i TextView). Chcę, aby LinearLayout był 5 razy większy niż TextView. Ten xml tworzy dokładne przeciwieństwo tego, czego się spodziewałem, TextView zajmuje 5 razy więcej miejsca niż LinearLayout. Zauważ, że ustawiłem szerokość obu elementów na 0 dp, co jest częstym niedopatrzymaniem.layout_weight działa w przeciwieństwie do tego, co powinno

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="15dp" 
    android:paddingRight="15dp" 
    android:layout_gravity="center_vertical" 
    android:weightSum="6" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_weight="5" > 

     <TextView 
      android:id="@+id/result_title_textview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:fontFamily="Arial" 
      android:textColor="#222222" 
      android:textSize="14sp"/> 

     <TextView 
      android:id="@+id/result_info_textview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:fontFamily="Arial" 
      android:textColor="#777777" 
      android:textSize="12sp" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/result_distance_textview" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:fontFamily="Arial" 
     android:textColor="#ffffffff" 
     android:textSize="14sp" /> 

</LinearLayout> 

EDIT: Ten układ jest rzeczywiście element listy, które jest zawarte w tym liście:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/results_list_fragment_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:paddingTop="15dp" > 

    <ListView 
     android:id="@+id/search_results_list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/scrollable_content_background" 
     android:divider="@drawable/listview_divider" 
     android:dividerHeight="1dp" > 
    </ListView> 

</LinearLayout> 
+1

Zestaw: Android: layout_weight = "1" dla układu liniowego i Androida: layout_weight = "5" dla tekstu. to znaczy. wymień tam wagę. – Cropper

+2

Tak, wiem, że to działa, ale pytanie brzmi raczej dlaczego? powinien mieć przeciwne zachowanie. – TrtG

+1

To jest ... źle. Czy możesz dołączyć zrzut ekranu? Jeśli ostatnio zmieniłeś kolejność układów, spróbuj czystej kompilacji. – Geobits

Odpowiedz

4

Problem przyszedł z listy kontenera, który miał „wrap_content” szerokość. Zmiana na "match_parent" naprawiła problem.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/results_list_fragment_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:paddingTop="15dp" > 

    <ListView 
     android:id="@+id/search_results_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/scrollable_content_background" 
     android:divider="@drawable/listview_divider" 
     android:dividerHeight="1dp" > 
    </ListView> 

</LinearLayout> 
+0

To jest niesamowite, zaufaj mi! Chociaż nie ma powodu, aby tak się stało, to przynajmniej znalazłem punkt, w którym to się stało. Nadymałem fragment wewnątrz układu ramki aktywności. Mój fragment był w proporcji 4: 6, ale zachowywał się jak 6: 4, ponieważ układ wewnątrz ramki miał ** android: layout_height = "wrap_content" **. Zmiana, która do match_parent zrobiła lewę! – sud007

5

ja też właśnie spotkał ten sam problem, a sposób rozwiązywania to zmienić:

  • szerokość widzenia dziecka do 0DP jeśli rodzic LinearLayout ma orientation="horizontal";

  • wysokość widzenia dziecka do 0DP jeśli rodzic LinearLayout ma orientation="vertical".

+1

Pomogło mi to, ponieważ w moim przykładzie nie chciałem zmienić układu na match_parent. Dziękuję Ci. Może to powinna być poprawna odpowiedź. –

Powiązane problemy