We wpisie na blogu dla deweloperów aplikacji na AndroidaGridLayout
przedstawiającym poniższy diagram przedstawiający wpływ rozpiętości na automatyczne przydzielanie indeksów:
Próbuję faktycznie zaimplementować to za pomocą GridLayout
. Oto, co mam do tej pory:
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.gridlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:orientation="horizontal"
app:columnCount="8">
<Button
app:layout_columnSpan="2"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_1"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_2"/>
<Button
app:layout_rowSpan="4"
android:text="@string/string_3"/>
<Button
app:layout_columnSpan="3"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_4"/>
<Button
app:layout_columnSpan="3"
android:layout_gravity="fill_horizontal"
android:text="@string/string_5"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_6"/>
<android.support.v7.widget.Space
app:layout_column="0"
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
</android.support.v7.widget.GridLayout>
Musiałem wprowadzić <Space>
elementy, aby każda kolumna miała minimalną szerokość, w przeciwnym razie miałbym kilka kolumn o zerowej szerokości.
Jednak nawet z nimi dostaję to:
Szczególnie:
Mimo to
android:layout_gravity="fill_horizontal"
moje widżety z rozpiętościami kolumn nie wypełniają połączonych kolumnPomimo
android:layout_rowSpan
wartości nic nie obejmuje rzędów
Czy ktoś może odtworzyć diagram z posta na blogu za pomocą GridLayout
?
Dzięki!
android
android-gridlayout
CommonsWare
źródło
źródło
Odpowiedzi:
Wydaje się to dość hakerskie, ale udało mi się uzyskać poprawny wygląd, dodając dodatkową kolumnę i wiersz poza to, co jest potrzebne. Następnie wypełniłem dodatkową kolumnę spacją w każdym wierszu, określając wysokość, a dodatkowy wiersz wypełniłem spacją w każdym kolumnie określającą szerokość. Aby uzyskać dodatkową elastyczność, wyobrażam sobie, że te rozmiary Space można ustawić w kodzie, aby zapewnić coś podobnego do wag. Próbowałem dodać zrzut ekranu, ale nie mam wymaganej reputacji.
źródło
Space
elementach. Dodałem zrzut ekranu dla przyszłych czytelników. Dzięki!rowCount
ustawiony na 8? Potrzebujemy 4 rzędów (wielkości największegorowSpan
) plus jeden dodatkowy,Space
więc powinno być 5. Czego mi brakuje?<Gridlayout>
w przeciwieństwie do<android.support.v7.widget.GridLayout>
źródło
GridLayout
pakiet z pakietu Android Support, układ się psuje, co sugeruje, że nie są one w pełni kompatybilne. Mam też nadzieję, że istnieje sposób, aby to zrobić, który nie wymaga okablowania widżetów. Pozwolę to trochę przetoczyć, aby zobaczyć, jakie inne odpowiedzi przyjdą (jeśli w ogóle), ale zaakceptuję twoje, jeśli nic lepszego się nie pojawi. Dzięki jeszcze raz!android:
atrybutów naapp:
jedynki, używając przestrzeni nazw XML zaplecza. Działa z tylnym portem.Musisz ustawić w kolumnach zarówno layout_gravity, jak i layout_columntWeight
źródło
Biblioteka Android Support V7 GridLayout ułatwia dystrybucję nadmiaru przestrzeni, dostosowując się do zasady wagi. Aby rozciągnąć kolumnę, upewnij się, że komponenty wewnątrz niej definiują wagę lub grawitację. Aby zapobiec rozciąganiu słupa, upewnij się, że jeden z elementów słupa nie definiuje ciężaru ani grawitacji. Pamiętaj o dodaniu zależności dla tej biblioteki. Dodaj com.android.support:gridlayout-v7:25.0.1 w build.gradle.
źródło
Począwszy od interfejsu API 21, GridLayout obsługuje teraz wagę, taką jak LinearLayout. Aby uzyskać szczegółowe informacje, kliknij poniższy link:
https://stackoverflow.com/a/31089200/1296944
źródło