2010-12-01 13 views
15

Ich kann falsch sein, wie <include> und <merge> funktionieren, aber nach Simple example of <merge> and <include> usage in Android XML-layouts, <include> bedeutet "nehmen Sie diese Datei und fügen Sie ihren Inhalt hier".Unterstützt Android die Vererbung von Layouts (ähnlich wie Django-Vorlagen)?

Angenommen, Sie möchten 3 Aktivitäten haben, die alle den gleichen Header haben, aber unterschiedliche Inhalte haben. Sie müssen immer noch 3 XML-Layoutdateien für jede Aktivität haben. Der einzige Unterschied zwischen den einzelnen Layouts besteht darin, dass sie im Tag <include> ein anderes Layout definieren. Wenn ich eine Fußzeile hinzufügen wollte, müsste ich jedes Layout ändern.

Ich bin auf der Suche nach einer Möglichkeit, die Umkehrung zu erreichen, so dass die Kinder Layouts bestimmte Blöcke des Elternteils überschreiben würden (similar to Django templates). Auf diese Weise würde ich, wenn ich diese Fußzeile hinzufügen wollte, einfach die Eltern ändern, und die Kinder würden weiterhin nur den Inhalt überschreiben.

+3

Nun, Sie könnten es natürlich programmatisch tun, mit dem Layout inflater, einige Vorlagen und Ihre eigene Vorlagenklasse. – janoliver

+0

'Style Vererbung' ist einfach. Verweisen Sie einen vorherigen 'Stil' auf das Attribut 'Eltern' eines neuen' Stils' –

Antwort

11

Angenommen, Sie möchten 3 Aktivitäten haben, die alle den gleichen Header haben, aber unterschiedliche Inhalte haben. Sie müssen immer noch 3 XML-Layoutdateien für jede Aktivität haben. Der einzige Unterschied zwischen den einzelnen Layouts besteht darin, dass sie ein anderes Layout im Tag definieren.

Wenn Sie drei Aktivitäten haben möchten, die alle denselben Header haben, haben Sie eine Layoutdatei pro Aktivität. Diese Datei enthält die Widgets, die für diese Aktivität eindeutig sind, und ein <include> Element für den gemeinsamen Header.

Auf diese Weise, wenn ich diese Fußzeile hinzufügen wollte, würde ich nur die Eltern ändern und die Kinder würden weiterhin nur den Inhalt überschreiben.

Dies wird derzeit von Android nicht unterstützt. Wie janoliver angibt, könnte man dafür eine eigene Lösung rollen lassen.

2

Ich habe das gelöst, indem ich ViewStub-Einträge in das Layout-XML des Elternteils eingefügt habe und - je nach Art der Unterklasse - den richtigen Stub aufgebläht habe.

http://developer.android.com/reference/android/view/ViewStub.html

ViewStub ist eine Art verzögertes Laden eine Ansicht, wenn Sie also nie() auf ihn aufzublasen anrufen oder nie sichtbar machen, es wird nicht in die Layouthierarchie hinzugefügt werden.