Certains de clarifier l'utilisation de <include> et <fusion>
J'ai juste besoin de quelqu'un pour me dire si j'ai bien compris lors de l'utilisation de <include>
et quand <merge>
.
Donc, je fais une mise en page d'en-tête que je veux inclure dans un autre XML mise en page:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Header text" />
</LinearLayout>
Et je l'inclus dans un autre XML de cette façon (ce qui est assez de base):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include
android:id="@+id/header"
layout="@layout/top"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Cela fonctionne bien, pas de problème à ce sujet. Mais dans le but d'optimiser le code, je dois utiliser <merge>
dans la mise en page qui est inclus. Ainsi, le top layout
ne devrait pas avoir un tag <LinearLayout>
mais elle doit ressembler à ceci:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Header text" />
</merge>
Ai-je bien compris cela correctement?
- Ya ça a l'air bon. Bien que, dans mon expérience, je n'ai pas besoin de fusion. Je ne peux pas il suffit de placer le texte à afficher dans son propre fichier xml et d'inclure ce fichier. Pas de fusion nécessaire.
- Oui, il fonctionne, mais est-ce vraiment sûr de l'utiliser de cette façon parce que les développeurs de Google n'a jamais affirmé une telle pratique. J'ai peur qu'arriverait-il s'ils décident de changer quelque chose qui reconnaît fusion de la balise.
- comme tout ce que vous devez mettre à jour le xml...à la nouvelle norme.Il y a eu des tonnes d'amorti méthodes sur android depuis le début donc c'est pas vraiment un problème, plus de quelque chose que l'on doit être conscient de.
- J'ai trouvé ce post explique des choses vraiment bien: "Améliorer la mise en page de la performance" sur 101apps.co.za
Vous devez vous connecter pour publier un commentaire.
Oui vous avez bien compris.
merge
est utilisé comme pseudo-élément parent de réduire le nombre de niveaux dans la vue des arbres.Il suffit de cocher cette lien, il donne une très bonne explication de
merge
.Dans votre fichier d'en-tête:
<LinearLayout>
ne fait aucune différence lorsque votre fichier est inclus dans un autre fichier que vous avez mentionné. C'est donc une bonne chose d'utilisermerge
à la place.Depuis en XML, vous devez utiliser un seul parent de l'élément et le reste des éléments XML doit être inclus dans celui-ci, vous devez utiliser
merge
comme seul élément parent, et peut éviter l'ajout inutile parent de mise en page.Juste éviter de "fusionner" lorsque vous souhaitez appliquer une mise en page différemment de la mise en page est définie dans le fichier dans lequel votre contenu est inclded.
À partir de ma compréhension, il fixera la fusion de l'élément le plus élevé de l'élément dans la vue de la hiérarchie. Inclure vais simplement mettre l'ensemble de viewgroup là. Donc, à l'aide de votre exemple, le point de vue de la hiérarchie devrait ressembler à:
Avec de fusion:
Comprennent:
De sorte que vous aurez un supplément de LinearLayout dans le point de vue de la hiérarchie que vous n'avez pas besoin. Cependant, parfois, vous avez besoin de ce point de vue intermédiaire. Dans votre cas, vous ne seriez pas, depuis le LinearLayouts ont la même mise en page params et pas d'autres différences.