He estado intentando durante unos días hacer que mis diseños sean más eficientes al convertir el uso de varios niveles de anidados LinearLayouts
en uno RelativeLayout
y me he encontrado con algunos problemas para los que no he podido encontrar una solución alternativa ...
He buscado en el grupo de principiantes de Android y en este sitio y no he podido encontrar nada que me ayude a resolver el problema.
Leí en uno de los blogs que puedes combinar diseños con combinar e incluir etiquetas. Entonces, lo que tengo es un archivo de diseño principal con un RelativeLayout
elemento raíz. Dentro de eso, tengo 5 etiquetas de inclusión que hacen referencia a 5 archivos de diseño xml diferentes, cada uno de los cuales tiene un elemento de combinación para la raíz (todos mis archivos de combinación son iguales, excepto por los ID que contienen).
Me encuentro con dos problemas, que explicaré después de publicar una versión simplificada de mi código de diseño:
Ejemplo de archivo de diseño principal:
<?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>
Ejemplo de archivo de combinación incluido:
<?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>
Me encuentro con dos problemas:
1) Los android:layout_*
atributos parecen ignorarse cuando se usan en la etiqueta de inclusión y todos los diseños combinados se muestran uno encima del otro. Según esta publicación ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) " android:layout_*
se puede usar cualquier atributo con la <include />
etiqueta"
2) Como no pude hacer que esto funcionara, decidí intentar agregar un android:layout_below
atributo al primer TextView
elemento en cada archivo de diseño de combinación, lo que significa que cada archivo de combinación haría referencia a una identificación de otro archivo de diseño de combinación ... En su mayor parte, esto realmente funcionó y mi diseño se ve bien. Sin embargo, aparece un error en uno de los android:layout_below
atributos que dice que no puede encontrar la identificación que especifiqué ... He verificado dos y tres veces las identificaciones para asegurarme de que sean correctas. La parte más extraña es que utilicé la AutoFill
función para poner la identificación en el atributo en primer lugar.
Si alguien tiene alguna sugerencia o solución alternativa, estaré más que feliz de probarlas. Además, si alguien puede pensar en una manera de tener un solo archivo de diseño xml combinado en lugar de 5, sería muy apreciado. No pude encontrar una manera de hacerlo porque necesito tener acceso a cada elemento en los archivos de diseño de combinación en tiempo de ejecución ...