2010-12-01 13 views
15

Puedo estar entendiendo mal cómo funcionan <include> y <merge>, pero de acuerdo con Simple example of <merge> and <include> usage in Android XML-layouts, <include> significa "tomar ese archivo y pegar su contenido aquí".¿Admite Android la herencia de diseño (similar a las plantillas de Django)?

Digamos que desea tener 3 actividades que todas tienen el mismo encabezado, pero tienen diferente contenido. Aún necesitará tener 3 archivos de diseño XML para cada actividad. La única diferencia entre cada uno de los diseños será que definen un diseño diferente en la etiqueta <include>. Si quisiera agregar un pie de página, tendría que cambiar cada diseño.

Estoy buscando una forma de lograr lo contrario, por lo que los diseños de los niños anularán los bloques específicos del elemento principal (similar to Django templates). De esa forma, si quisiera agregar ese pie de página, simplemente cambiaría el padre y los niños continuarían anulando solo el contenido.

+3

bien, por supuesto, puede hacerlo mediante programación, utilizando el inflador de diseño, algunas plantillas y su propia clase de plantilla. – janoliver

+0

'Style inheritance' es sencillo. Referencia un 'estilo' anterior contra el atributo' padre' de un nuevo 'estilo' –

Respuesta

11

Digamos que desea tener 3 actividades que todas tienen el mismo encabezado, pero tienen diferente contenido. Aún necesitará tener 3 archivos de diseño XML para cada actividad. La única diferencia entre cada uno de los diseños será que definen un diseño diferente en la etiqueta.

Si desea tener tres actividades que tengan el mismo encabezado, tendrá un archivo de diseño por actividad. Ese archivo tendrá los widgets únicos para esa actividad y un elemento <include> para el encabezado común.

De esta forma, si quisiera agregar ese pie de página, solo cambiaría el elemento primario y los niños continuarían sobrescribiendo solo el contenido.

Eso no es compatible con Android en este momento. Como lo indica janoliver, podría lanzar su propia solución para esto.

2

He resuelto esto agregando entradas ViewStub en el xml de diseño del elemento principal y, dependiendo del tipo de subclase, inflando el código auxiliar correcto.

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

ViewStub es una especie de carga diferida una vista, por lo que si nunca llamas inflar() sobre ella o nunca lo hacen visibles no se añadirá a la jerarquía de disposición.

Cuestiones relacionadas