Ich versuche <include>
zu verwenden, um ImageButton
s innerhalb einer android.support.v7.widget.GridLayout
zu enthalten. Das Problem ist, wenn ich nicht alle Attribute explizit auf meinen <include>
Elementen angeben, werden sie nicht ordnungsgemäß angezeigt. Mit anderen Worten, das Include ist sinnlos, da ich alle Attribute auf jedem Element neu deklarieren muss.Verwenden von <include> in android.support.v7.widget.GridLayout nicht korrekt angezeigt
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>
Wenn ich alle Attribute direkt auf den <include>
s erklären, hier ist, wie es in XML aussieht:
<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" />
Wie Sie im unten stehenden Vergleichsbild sehen können, skalieren die Schaltflächen jetzt richtig, aber die Bilder sind nirgendwo zu sehen. Wenn ich die <include>
s zu ImageButton
ändere, funktionieren die Dinge wie erwartet.
<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" />
Gibt es eine Abhilfe für dieses?
Da ich 12 fast identische Tasten in meinem Wähltasten haben möchte, möchte ich das XML wirklich aufräumen, indem ich eine "Vorlage" einfüge und nur die erforderlichen Attribute für jede Taste (src
und id
) modifiziere).
EDIT
Der Versuch, Stile zu verwenden, wie es in einer Antwort vorgeschlagen, hat nicht funktioniert. Keine der Ansichten, auf die ich die Stile angewendet habe, um angezeigt zu werden. Was noch seltsamer ist, selbst wenn ich den Stil nur auf eine der Ansichten in der GridLayout
anwende, wird nur die letzte Ansicht angezeigt (ich habe den Beispielcode hier auf nur zwei Ansichten für die Lesbarkeit verkürzt, in Wirklichkeit habe ich zwölf) .
Hier ist der Stil, den ich versuchte mit:
<?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>
Guter Vorschlag, leider hat es nicht funktioniert. Keine der Ansichten, auf die ich die Stile anwende, wird angezeigt. Noch seltsamer ist, dass selbst wenn ich den Stil nur auf eine der Ansichten anwende, nur die letzte Ansicht im GridLayout angezeigt wird! – BadCash
Kannst du bitte den Style posten? –
Ich habe die Frage aktualisiert. – BadCash