Imaginons que nous développions 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 une 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 l'IDE, la fusion agit toujours comme FrameLayout, et nous verrons quelque chose comme ça:
(C'est Android Studio, Intellij IDEA est juste 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, c'est triste de perdre une si grande aide, même pour certaines mises en page. Peut-être existe-t-il un moyen de spécifier, comment Preview doit interpréter la merge
balise dans une mise en page particulière?
Réponses:
Il existe un nouvel attribut d'outils parentTag ( ajouté dans Android Studio 2.2 ) que vous pouvez utiliser pour spécifier le type de mise en page d'une balise de fusion, ce qui rendra le rendu de la mise en page correctement dans l'aperçu de l'éditeur de mise en page.
Donc, en utilisant votre exemple:
Remarque : Les deux
android:layout_width
etandroid:layout_height
doivent être spécifiés pour que la mise en page s'affiche correctement dans l'éditeur.la source
<com.yourpackage.yourcustomview id="@+id/my_cust_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
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 mises en page <fusion>.
http://tools.android.com/recent/androidstudio058released
layout / layout_merge.xml avec les outils: showIn:
layout / simple_relativelayout.xml avec include:
la source
Est également possible d'utiliser une classe personnalisée comme parent au lieu de fusionner comme
Et puis gonflez directement cette mise en page et diffusez la vue des résultats
SomeView
. Le studio Android vérifiera directement la classe parent deSomeView
et gérera l'aperçu commeLinerLayout
. Vous pouvez utiliser laonFinishInflate()
méthode dansSomeView
pour lier les vues parfindViewById()
. L'avantage de cette solution est que vous pouvez mettre toutes les définitions de mise en page ou de style directement dans le fichier de mise en page, vous ne pouvez pas utiliser de méthode commesetOrientation()
dans le code.la source