Ho provato per alcuni giorni a rendere i miei layout più efficienti convertendoli dall'utilizzo di diversi livelli di annidato LinearLayouts
a uno RelativeLayout
e ho riscontrato alcuni problemi per i quali non sono riuscito a trovare una soluzione ...
Ho cercato nel gruppo principianti Android e in questo sito e non sono riuscito a trovare nulla che mi aiutasse a risolvere il problema.
Ho letto su uno dei blog che puoi combinare layout con merge e include tag. Quindi quello che ho è un file di layout principale con un RelativeLayout
elemento radice. Al suo interno ho 5 tag di inclusione che fanno riferimento a 5 diversi file di layout xml che hanno ciascuno un elemento di unione per la radice (tutti i miei file di unione sono gli stessi tranne che per gli ID in essi contenuti).
Sto riscontrando due problemi, che spiegherò dopo aver pubblicato una versione semplificata del mio codice di layout:
File di layout principale di esempio:
<?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>
File di unione incluso di esempio:
<?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>
Sto riscontrando due problemi:
1) Gli android:layout_*
attributi sembrano essere ignorati quando vengono utilizzati nel tag include e tutti i layout uniti vengono visualizzati uno sopra l'altro. Secondo questo post ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) "qualsiasi android:layout_*
attributo può essere utilizzato con il <include />
tag"
2) Poiché non riuscivo a farlo funzionare, ho deciso di provare ad aggiungere un android:layout_below
attributo al primo TextView
elemento in ogni file di layout di unione, il che significa che ogni file di unione farebbe riferimento a un id da un altro file di layout di unione ... Per la maggior parte questo effettivamente ha funzionato e il mio layout sembra a posto. Tuttavia, ricevo un errore su uno degli android:layout_below
attributi che dice che non riesce a trovare l'id che ho specificato ... Ho controllato due volte e tre volte gli ID per assicurarmi che fossero corretti. La parte più strana è che ho usato la AutoFill
funzione per mettere l'id nell'attributo in primo luogo.
Se qualcuno ha suggerimenti o soluzioni alternative, sarò più che felice di provarli. Inoltre, se qualcuno può pensare a un modo per me di avere solo un file di layout xml di unione invece di 5, sarebbe molto apprezzato. Non sono riuscito a trovare un modo per farlo perché ho bisogno di avere accesso a ogni elemento nei file di layout di unione in fase di esecuzione ...