web-dev-qa-db-fra.com

Aperçu de la mise en page avec la balise racine de fusion dans Intellij IDEA / Android Studio

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: Preview with merge

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

134
darja

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.

298
starkej2

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