Ich habe seit einigen Tagen versucht, meine Layouts effizienter zu gestalten, indem ich mehrere verschachtelte Ebenen LinearLayouts
in eine umwandelte , RelativeLayout
und bin auf einige Probleme gestoßen, für die ich keine Problemumgehung gefunden habe ...
Ich habe die Android-Anfängergruppe und diese Website durchsucht und konnte nichts finden, was mir bei der Lösung des Problems helfen könnte.
Ich habe in einem der Blogs gelesen, dass Sie Layouts mit Zusammenführen kombinieren und Tags einschließen können. Ich habe also eine Hauptlayoutdatei mit einem RelativeLayout
Stammelement. Darin befinden sich 5 Include-Tags, die auf 5 verschiedene XML-Layoutdateien verweisen, die jeweils ein Zusammenführungselement für das Stammverzeichnis enthalten (alle meine Zusammenführungsdateien sind bis auf die darin enthaltenen IDs identisch).
Ich habe zwei Probleme, die ich nach der Veröffentlichung einer vereinfachten Version meines Layout-Codes erläutern werde:
Beispiel für eine Hauptlayoutdatei:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/translucent_gray" >
<include
android:id="@+id/running_gallery_layout_id"
layout="@layout/running_gallery_layout" />
<include
android:id="@+id/recent_gallery_layout_id"
layout="@layout/recent_gallery_layout"
android:layout_below="@id/running_gallery_layout_id" />
<include
android:id="@+id/service_gallery_layout_id"
layout="@layout/service_gallery_layout"
android:layout_below="@id/recent_gallery_layout_id" />
<include
android:id="@+id/process_gallery_layout_id"
layout="@layout/process_gallery_layout"
android:layout_below="@id/service_gallery_layout_id" />
</RelativeLayout>
Beispiel enthaltene Zusammenführungsdatei:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/TitleText"
android:id="@+id/service_gallery_title_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="@string/service_title" />
<Gallery
android:id="@+id/service_gallery_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/service_gallery_title_text_id" />
<TextView
style="@style/SubTitleText"
android:id="@+id/service_gallery_current_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/service_gallery_title_text_id"
android:layout_above="@id/service_gallery_id" />
</merge>
Ich habe zwei Probleme:
1) Die android:layout_*
Attribute scheinen ignoriert zu werden, wenn sie im Include-Tag verwendet werden, und alle zusammengeführten Layouts werden übereinander angezeigt. Laut diesem Beitrag ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) "kann jedes android:layout_*
Attribut mit dem <include />
Tag verwendet werden"
2) Da dies nicht funktionieren konnte, habe ich beschlossen, android:layout_below
dem ersten TextView
Element in jeder Zusammenführungslayoutdatei ein Attribut hinzuzufügen , was bedeutet, dass jede Zusammenführungsdatei auf eine ID aus einer anderen Zusammenführungslayoutdatei verweist ... Zum größten Teil hat tatsächlich funktioniert und mein Layout sieht gut aus. Bei einem der android:layout_below
Attribute wird jedoch eine Fehlermeldung angezeigt, dass die von mir angegebene ID nicht gefunden werden kann. Ich habe die IDs doppelt und dreifach überprüft, um sicherzustellen, dass sie korrekt sind. Das Seltsamste ist, dass ich die AutoFill
Funktion verwendet habe, um die ID an erster Stelle in das Attribut einzufügen .
Wenn jemand Vorschläge oder Problemumgehungen hat, probiere ich diese gerne aus. Wenn mir jemand eine Möglichkeit einfallen lässt, nur eine XML-Layoutdatei zum Zusammenführen anstelle von 5 zu erstellen, wäre dies sehr dankbar. Ich konnte keinen Weg finden, dies zu tun, da ich zur Laufzeit Zugriff auf jedes Element in den Zusammenführungslayoutdateien haben muss ...