2011-07-12 2 views
9

J'ai appris à fusionner et à inclure ces derniers temps, et j'ai une question que je n'arrive pas à résoudre. Dites que j'ai une mise en page qui définit un composant d'en-tête que je veux ajouter à plusieurs mises en page. Cependant, je veux changer le titre, ou l'icône de chaque en-tête pour chaque utilisation d'inclure. Par exemple dire que j'ai la disposition suivante:Modification des attributs imbriqués dans une mise en page incluse

<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> 

Ensuite, je peux comprendre que, dans d'autres mises en page en utilisant:

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

Je sais que je peux modifier tout layout_ * attribut de l'élément racine, mais je peux définir d'autres attributs qui sont substitués dans la mise en page, comme dire "title" dans cet exemple, sans avoir à créer ma propre sous-classe de View, ajouter des définitions déclarables dans les valeurs/ressources, etc? Avoir quelque chose comme ça rendrait la création de vues réutilisables beaucoup plus simple, mais je ne peux pas trouver de preuves indiquant si merge + include peut le faire.

+0

Je pense en quelque sorte que si vous voulez changer le contenu de ces vues, vous devriez utiliser une vue personnalisée composée de ces vues. La chose include est plus une facilité pour quand vous voulez copier/coller une vue/viewgroup ailleurs. – Gregory

+0

Mais l'inclusion est d'une utilité limitée si vous ne pouvez copier et coller exactement le même code. Les vues personnalisées requièrent beaucoup plus de ressources pour créer, ajouter des options de style personnalisées, créer du code pour sous-classer une vue, etc. Si je ne fais que peaufiner certains attributs d'éléments imbriqués, il semblerait que cela puisse être fait sans manger l'éléphant entier – chubbsondubs

+0

J'ai lu le rapide "tutorial" sur include (http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html), et il semble assez clair que c'est juste signifiait être un simple copier/coller, en particulier lorsque vous incluez une "sous-disposition" commune dans deux configurations différentes (portrait et paysage). Bien que je trouve votre idée assez cool après tout:/ – Gregory

Répondre

5

La réponse est non. Malheureusement, Android n'est pas si puissant. Vous devez créer votre propre extension de ViewGroup et écrire plus de code.

+0

pouvez-vous donner un exemple de comment faire cela? – jpotts18

+0

Non car l'écriture de votre propre composant personnalisé nécessiterait plus d'efforts et d'espace que ce qui est autorisé dans un commentaire. Vous ne pouvez pas faire ce que je décris en utilisant des fichiers de mise en page seuls. Vous devez écrire votre propre composant client en étendant ViewGroup si vous voulez construire quelque chose qui peut être réutilisé et paramétré comme ceci. – chubbsondubs

+0

Je vais essayer d'en faire un. Merci! – jpotts18

Questions connexes