2012-09-11 13 views
7

Piszemy aplikację targetującą ICS + i wierzymy, że GridLayout jest najlepszym paradygmatem układu, ale wydaje się, że napisano o niej bardzo niewiele i mamy pewne problemy z wyrównaniem.Poziomo w środku Widoki wewnątrz Android GridLayout

<GridLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/row_background" 
    android:rowCount="1" 
    android:columnCount="3" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:useDefaultMargins="true" 
    android:background="@drawable/list_item_bg"> 

    <ImageView 
     android:id="@+id/visibilityIcon" 
     android:layout_row="0" 
     android:layout_column="0" 
     android:src="@drawable/visibility_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"/> 

    <ImageView 
     android:id="@+id/windIcon" 
     android:layout_row="0" 
     android:layout_column="1" 
     android:src="@drawable/wind_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"/> 

    <ImageView 
     android:id="@+id/crosswindIcon" 
     android:layout_row="0" 
     android:layout_column="2" 
     android:src="@drawable/cloud_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"/> 

</GridLayout> 

Jednak pozostałe 2 ikony pozostają wyrównane do lewej, a prawa z lewej strony ikona z pozostałym odstępem.

Zasadniczo musimy określić rozmiar każdej kolumny jako 1/3 (od 3 kolumn) całkowitego rozmiaru ekranu. Myślałem, że to jest to, co GridLayout, ale wygląda na to, że "wrap_content" powoduje to zachowanie (ma sens), ale "match_parent" powoduje, że pierwsza kolumna wypełnia cały ekran, zamiast wypełniać jego komórkę, co jest zachowaniem, jakiego oczekiwałbym.

Wygląda na to, że wypróbowaliśmy każdą kombinację grawitacji, layout_gravity itp., Ale albo zasadniczo robimy coś złego, albo znaleźliśmy ograniczenie GridLayout.

Dzięki za pomoc!

+0

GridLayout wydaje się bezużyteczny! –

Odpowiedz

8

Tylko jeden rząd i jedna kolumna mogą rosnąć w GridLayout, i to jest grawitacja wzdłuż tej osi. Jeśli więcej niż jeden wiersz lub kolumnę określa grawitację, tylko jeden ją dostanie (jeśli pamiętam, jest to "ostatni"). Wybierz inny układ lub wpisz własny. Jeśli chcesz tylko wiersz z równo podzielonymi ikonami, możesz użyć LinearLayout, w którym szerokości komponentów wynoszą 0px, a waga jest taka sama, np. 1.

+0

Dzięki za odpowiedź. Z ciekawości, gdzie znalazłeś to ograniczenie? Zbadamy więcej, ale wydaje się prawdopodobne, że masz rację. – RealCasually

+0

Podobnie jak w przypadku wielu rzeczy z Androidem było to próbne i błędne czytanie źródła;) Ale w dokumencie jest tak naprawdę sekcja zatytułowana Ograniczenia, z następującymi zdaniami: "GridLayout nie zapewnia wsparcia dla zasady wagi, jak Zdefiniowana waga Zasadniczo nie jest więc możliwe skonfigurowanie GridLayout do dystrybucji nadmiarowej przestrzeni między wieloma komponentami. " –

+0

Dzięki. Wiem, że odbiegam od początkowego pytania tutaj - ale czy jest to "waga" w LinearLayout koncepcji, której prawdopodobnie szukam? Moim celem jest równomierne rozmieszczenie tych ikon na ekranie z równą ilością odstępów. – RealCasually

Powiązane problemy