Ich kann Attribute nicht überschreiben, wenn ich <include> in meinen Android-Layoutdateien verwende. Als ich nach Fehlern suchte, fand ich Declined Issue 2863 :
"include-Tag ist fehlerhaft (das Überschreiben von Layout-Parametern funktioniert nie)"
Da Romain angibt, dass dies in den Testsuiten und seinen Beispielen funktioniert, muss ich etwas falsch machen.
Mein Projekt ist folgendermaßen organisiert:
res/layout
buttons.xml
res/layout-land
receipt.xml
res/layout-port
receipt.xml
Die button.xml enthält ungefähr Folgendes:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button .../>
<Button .../>
</LinearLayout>
Und die Dateien Receipt.xml im Hoch- und Querformat sehen ungefähr so aus:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
...
<!-- Overridden attributes never work. Nor do attributes like
the red background, which is specified here. -->
<include
android:id="@+id/buttons_override"
android:background="#ff0000"
android:layout_width="fill_parent"
layout="@layout/buttons"/>
</LinearLayout>
Was vermisse ich?
android
android-widget
Eric Burke
quelle
quelle
Antworten:
Ich habe gerade das Problem gefunden. Erstens können Sie nur layout_ * -Attribute überschreiben, sodass der Hintergrund nicht funktioniert. Das ist dokumentiertes Verhalten und einfach ein Versehen meinerseits.
Das eigentliche Problem ist in LayoutInflater.java zu finden:
Wenn das <include> -Tag nicht sowohl layout_width als auch layout_height enthält, tritt die RuntimeException auf und wird unbeaufsichtigt behandelt, auch ohne Protokollanweisung.
Die Lösung besteht darin, bei Verwendung des Tags <include> immer sowohl layout_width als auch layout_height einzuschließen, wenn Sie eines der layout_ * -Attribute überschreiben möchten.
Mein Beispiel sollte sich ändern zu:
quelle
Ich habe eine Erweiterungsanforderung eingereicht , damit alle enthaltenen Attribute überschrieben werden können:
quelle
<include>
wird das jetzt noch häufiger verwendet. Das Überschreiben von Daten ist ein MussIch habe festgestellt, dass ich manchmal das android: id-Tag vermisse, wenn ich den GUI-Builder in Eclipse verwende. Stellen Sie sicher (wenn ich bemerke), dass ich die vom IDV-Layout verwendete ID in eine TextView aus dem Builder einfüge.
wird
Anstatt 'false' 'false' zu bekommen, bekomme ich :) und beinhaltet das Arbeiten in Ordnung.
quelle