L'article du blog des développeurs Android présentantGridLayout
ce diagramme montre comment les intervalles affectent l'allocation d'index automatique:
J'essaye d'implémenter réellement cela en utilisant un GridLayout
. Voici ce que j'ai jusqu'à présent:
<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>
J'ai dû introduire les <Space>
éléments pour m'assurer que chaque colonne avait une largeur minimale, sinon, j'aurais un tas de colonnes de largeur nulle.
Cependant, même avec eux, je comprends ceci:
Notamment:
Malgré tout
android:layout_gravity="fill_horizontal"
, mes widgets avec des étendues de colonnes ne remplissent pas les colonnes étenduesMalgré les
android:layout_rowSpan
valeurs, rien ne s'étend sur les lignes
Quelqu'un peut-il reproduire le diagramme du billet de blog en utilisant un GridLayout
?
Merci!
la source
Réponses:
Cela semble assez hacky, mais j'ai réussi à obtenir le bon look en ajoutant une colonne et une ligne supplémentaires au-delà de ce qui est nécessaire. Ensuite, j'ai rempli la colonne supplémentaire avec un espace dans chaque ligne définissant une hauteur et j'ai rempli la ligne supplémentaire avec un espace dans chaque col définissant une largeur. Pour plus de flexibilité, j'imagine que ces tailles d'espace pourraient être définies dans le code pour fournir quelque chose de similaire aux poids. J'ai essayé d'ajouter une capture d'écran, mais je n'ai pas la réputation nécessaire.
la source
Space
éléments. J'ai ajouté une capture d'écran pour les futurs lecteurs. Merci!rowCount
ensemble est-il à 8? Nous avons besoin de 4 lignes (la taille de la plus granderowSpan
) plus une supplémentaire pourSpace
cela devrait être 5. Que me manque-t-il?<Gridlayout>
par opposition à<android.support.v7.widget.GridLayout>
la source
GridLayout
package de support Android, la mise en page se rompt, ce qui suggère que les deux ne sont pas complètement compatibles. En outre, j'espère vraiment qu'il existe un moyen de le faire qui n'implique pas les tailles de câblage des widgets. Je vais laisser ça tourner un peu, pour voir quelles autres réponses viennent (le cas échéant), mais j'accepterai la vôtre si rien de mieux ne se présente. Merci encore!android:
attributs requis en attributsapp:
, en utilisant l'espace de noms XML du backport. Cela fonctionne avec le backport.Vous devez définir à la fois layout_gravity et layout_columntWeight sur vos colonnes
la source
La bibliothèque Android Support V7 GridLayout facilite la distribution de l'espace excédentaire en tenant compte du principe du poids. Pour étirer une colonne, assurez-vous que les composants à l'intérieur définissent un poids ou une gravité. Pour empêcher une colonne de s'étirer, assurez-vous que l'un des composants de la colonne ne définit pas un poids ou une gravité. N'oubliez pas d'ajouter une dépendance pour cette bibliothèque. Ajoutez com.android.support:gridlayout-v7:25.0.1 dans build.gradle.
la source
À partir de l'API 21, GridLayout prend désormais en charge le poids comme LinearLayout. Pour plus de détails, veuillez consulter le lien ci-dessous:
https://stackoverflow.com/a/31089200/1296944
la source