Ich versuche verschiedene Layouts in meine Ansicht einzubinden, abhängig vom übergeordneten Theme
.
Der Idee folgend:
attrs.xml
%Vor%styles.xml
%Vor%activity.xml
%Vor%Wenn ich den obigen Code ausführe, erhalte ich die folgende Ausnahme:
%Vor%Was mache ich falsch? Ist das überhaupt möglich?
Hinweis # 1: Ich habe die Theme
meiner MainActivity
auf android:theme="@style/AppTheme"
Hinweis # 2: In der Design-Ansicht des Layout-Editors funktioniert alles wie erwartet. Wenn ich das Theme ändere, wird das Include korrekt aktualisiert.
Siehe auch die folgenden Screenshots:
Leider ist das nicht möglich, aber mir gefällt die Idee wirklich. Ich habe den Fluss von LayoutInflater
verfolgt und das Attribut layout
benötigt TypedValue.TYPE_REFERENCE
was bedeutet, dass ?attr
nicht erlaubt ist. Sie haben sogar einen Kommentar in der Erklärungsmethode hinterlassen.
%Vor%android.content.res.XmlBlock.java:385
Im Grunde haben Sie nichts falsch gemacht - die Inflation in Preview funktioniert anders, was die Verwirrung verursachte.
Seit Lamorak erklärte alles in seinem " eingehende "Antwort Ich denke, es ist sicher zu sagen, dass es keine Lösung mit dem <include />
-Tag für Ihr Problem gibt.
Also nach einem anderen Ansatz, der in meinem Testprojekt funktioniert hat:
# 1 - Ersetzen Sie <include />
durch <ViewStub />
# 2 - Erweitern Sie den ViewStub
%Vor% Irgendwelche Nachteile mit dieser Methode? Nun, Sie werden das ViewStub-Layout nicht in Ihrem Design-Tab sehen und das <merge />
-Tag wird nicht funktionieren.
Tags und Links android android-layout android-styles android-attributes