Imaginons que nous développons un composant composé basé sur LinearLayout. Donc, nous créons une classe comme ceci:
public class SomeView extends LinearLayout {
public SomeView(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(LinearLayout.VERTICAL);
View.inflate(context, R.layout.somelayout, this);
}
}
Si nous utilisons LinearLayout
comme racine de somelayout.xml
, nous aurons un niveau de vue supplémentaire, nous utilisons donc la balise de fusion:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Some text"
Android:textSize="20sp"/>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Some other text"/>
</merge>
Mais dans l'onglet Aperçu de IDE agit toujours comme FrameLayout, et nous verrons quelque chose comme ça:
(C'est Android Studio, Intellij IDEA est la même chose, à propos d'Eclipse, je ne sais pas))
L'aperçu accélère beaucoup le développement des mises en page, il est triste de perdre une telle aide, même pour certaines mises en page. Peut-être existe-t-il un moyen de spécifier comment l'aperçu doit interpréter la balise merge
dans une disposition particulière?
Il y a un nouvel attribut d'outils parentTag ( ajouté dans Android Studio 2.2 ) que vous pouvez utiliser pour spécifier le type de disposition pour une balise de fusion, ce qui rendra la disposition rendue correctement dans l'aperçu de l'éditeur de mise en page.
Donc, en utilisant votre exemple:
<merge xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:parentTag="LinearLayout"
tools:orientation="horizontal">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Some text"
Android:textSize="20sp"/>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Some other text"/>
</merge>
Remarque : Les deux Android:layout_width
et Android:layout_height
doit être spécifié pour que la mise en page s'affiche correctement dans l'éditeur.
Edit: réponse obsolète. Voir la réponse de starkej2.
Android Studio 0.5.8 a ajouté la prise en charge des outils: showIn. En l'utilisant, il est possible de prévisualiser les dispositions <fusion>.
http://tools.Android.com/recent/androidstudio058released
layout/layout_merge.xml avec les outils: showIn:
<merge xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
tools:showIn="@layout/simple_relativelayout">
......
</merge>
layout/simple_relativelayout.xml avec include:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<include layout="@layout/layout_merge"/>
</RelativeLayout>