2011-07-12 9 views
9

He estado aprendiendo acerca de la fusión e incluyo últimamente, y tengo una pregunta que parece que tampoco puedo encontrar la respuesta. Supongamos que tengo un diseño que define un componente de encabezado que quiero agregar a varios diseños. Sin embargo, quiero cambiar el título o icono de cada encabezado por cada uso de incluir. Por ejemplo decir que tengo la siguiente distribución:Modificación de atributos anidados en un diseño incluido

<RelativeLayout android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       style="@style/menu_header"> 

    <Button android:id="@+id/backButton" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/button" 
      android:text="@string/back"/> 

    <TextView style="@style/headerTitle" 
       android:layout_centerInParent="true" 
       android:text="${title}" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/> 
</RelativeLayout> 

Entonces puede incluir que en otros diseños usando:

<LinearLayout ...> 
    <include android:id="@+id/searchHeader" layout="@layout/shared_header" title="Search"/> 
    ... 
</LinearLayout> 

Sé que puedo modificar cualquier layout_ * atributo del elemento raíz, pero puedo definir otros atributos que se sustituyan en el diseño, como decir "título" en este ejemplo, sin tener que crear mi propia subclase de Vista, agregar definiciones de declaración de estilo en valaues/recursos, etc.

Tener algo como esto haría que crear vistas reutilizables sea mucho más simple, pero no puedo encontrar ninguna evidencia que diga si merge + include puede hacerlo.

+0

Creo que si quieres cambiar el contenido de esas vistas, deberías usar una vista personalizada formada por esas vistas. La opción Incluir es más una instalación para cuando quiera copiar/pegar una vista/grupo de visualización en otro lugar. – Gregory

+0

Pero incluir es de uso limitado si solo puede copiar y pegar exactamente el mismo código. Las vistas personalizadas requieren mucho más sobrecarga al autor, agregar opciones de estilo personalizadas, crear código para subclase de una vista, etc. Si todo lo que hago es ajustar algunos atributos de elementos anidados parece que podría hacerse sin comer todo el elefante – chubbsondubs

+0

Leí el "tutorial" rápido sobre incluir de nuevo (http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html), y parece bastante claro que es solo pretende ser un simple copiar/pegar, especialmente cuando incluye un "subdispositivo común" en 2 diseños diferentes (vertical y horizontal). Aunque sí encuentro tu idea genial después de todo:/ – Gregory

Respuesta

5

La respuesta es no. Desafortunadamente, Android no es tan poderoso. Debes crear tu propia extensión de ViewGroup y escribir más código.

+0

¿me puedes dar un ejemplo de cómo hacer esto? – jpotts18

+0

No, porque escribir su propio componente personalizado requeriría más esfuerzo y espacio de lo permitido en un comentario. No puede hacer lo que describo usando solo archivos de diseño. Debe escribir su propio componente de cliente extendiendo ViewGroup si desea construir algo que pueda ser reutilizado y parametrizado de esta manera. – chubbsondubs

+0

Intentaré y haré uno. ¡Gracias! – jpotts18

Cuestiones relacionadas