J'essaie d'utiliser <include>
pour inclure ImageButton
s à l'intérieur d'un android.support.v7.widget.GridLayout
. Le problème est que si je ne spécifie pas explicitement tous les attributs sur mes éléments <include>
, ils ne s'affichent pas correctement. En d'autres termes, l'inclusion est inutile puisque je dois redéclarer tous les attributs sur chaque élément <include>
.En utilisant <include> dans android.support.v7.widget.GridLayout ne s'affiche pas correctement
dialpad_button.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="0dp"
android:layout_height="0dp"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
grid:layout_gravity="fill"
android:layout_margin="5dp"
android:scaleType="centerInside"/>
dialpad_view.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:id="@+id/dialpad_grid_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
grid:alignmentMode="alignBounds"
grid:columnCount="2"
grid:rowCount="1">
<include
android:id="@+id/dialpad_view_btn1"
android:src="@drawable/dialpad_1"
layout="@layout/dialpad_button" />
<include
android:id="@+id/dialpad_view_btn2"
android:src="@drawable/dialpad_2"
layout="@layout/dialpad_button" />
</android.support.v7.widget.GridLayout>
Si je déclare tous les attributs directement sur les <include>
s, voici à quoi il ressemble en XML:
<include
layout="@layout/dialpad_button"
android:id="@+id/dialpad_view_btn1"
android:src="@drawable/dialpad_1"
android:layout_width="0dp"
android:layout_height="0dp"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
grid:layout_gravity="fill"
android:layout_margin="5dp"
android:scaleType="centerInside" />
Comme vous pouvez le voir dans l'image de comparaison ci-dessous, les boutons évoluent maintenant correctement mais les images ne sont visibles nulle part.
Et si je change le <include>
s en ImageButton
, les choses fonctionnent comme prévu.
<ImageButton
android:id="@+id/dialpad_view_btn1"
android:src="@drawable/dialpad_1"
android:layout_width="0dp"
android:layout_height="0dp"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
grid:layout_gravity="fill"
android:layout_margin="5dp"
android:scaleType="centerInside" />
est-il une solution à cela? Comme je vais avoir 12 boutons presque identiques dans mon clavier, je voudrais vraiment nettoyer le XML en incluant un "template" et en ne modifiant que les attributs nécessaires pour chaque bouton (ie src
et id
).
EDIT
Essayer d'utiliser les styles, comme le suggère dans une réponse, ne fonctionnait pas. Aucune des vues auxquelles j'ai appliqué les styles à afficher. Ce qui est encore plus étrange, même si je n'applique le style à l'une des vues dans le GridLayout
, seule la dernière vue est affichée (j'ai raccourci l'exemple de code ici à seulement deux vues pour la lisibilité, en réalité j'en ai douze) .
Voici le style que j'ai essayé d'utiliser:
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto" >
<style name="dialPadButtonStyle">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">0dp</item>
<item name="grid:layout_columnWeight">1</item>
<item name="grid:layout_rowWeight">1</item>
<item name="grid:layout_gravity">fill</item>
<item name="android:layout_margin">5dp</item>
<item name="android:scaleType">centerInside</item>
<item name="android:background">@android:color/transparent</item>
</style>
</resources>
Bonne suggestion, malheureusement cela n'a pas fonctionné. Aucune des vues auxquelles j'applique les styles n'est affichée. Encore plus étrange est que même si j'applique le style à seulement une des vues, seule la dernière vue dans le GridLayout est affichée! – BadCash
Pouvez-vous poster le style, s'il vous plaît? –
J'ai mis à jour la question. – BadCash