it-swarm.com.de

Layoutvorschau mit Merge-Root-Tag in Intellij IDEA / Android Studio

Stellen wir uns vor, wir entwickeln zusammengesetzte Komponenten auf der Basis von LinearLayout. Also erstellen wir eine Klasse wie diese:

public class SomeView extends LinearLayout {
    public SomeView(Context context, AttributeSet attrs) {
        super(context, attrs);

        setOrientation(LinearLayout.VERTICAL);
        View.inflate(context, R.layout.somelayout, this);
    }
}

Wenn wir LinearLayout als Root von somelayout.xml Verwenden, haben wir eine zusätzliche Ansichtsebene, daher verwenden wir das Merge-Tag:

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

Aber auf der Registerkarte Vorschau in IDE merge fungiert immer als FrameLayout, und wir werden so etwas sehen: Preview with merge

(Es ist Android Studio, Intellij IDEA ist genau das gleiche, über Eclipse weiß ich nicht)

Die Vorschau beschleunigt die Entwicklung von Layouts erheblich. Es ist traurig, dass selbst bei einigen Layouts eine so große Hilfe verloren geht. Möglicherweise gibt es eine Möglichkeit anzugeben, wie die Vorschau das merge -Tag in einem bestimmten Layout interpretieren soll.

134
darja

Es gibt ein neues Attribut für parentTag-Tools ( hinzugefügt in Android Studio 2.2 ), mit dem Sie den Layout-Typ für ein Zusammenführungs-Tag angeben können, mit dem das Layout gerendert wird richtig in der Vorschau des Layout-Editors.

Verwenden Sie also Ihr Beispiel:

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

Hinweis : Beide Android:layout_width und Android:layout_height muss angegeben werden, damit das Layout im Editor korrekt angezeigt wird.

298
starkej2

Bearbeiten: Veraltete Antwort. Siehe Antwort von starkej2.


Android Studio 0.5.8 unterstützt jetzt folgende Tools: showIn. Mithilfe dieser Funktion können Sie eine Vorschau der <Zusammenführungs> -Layouts anzeigen.

http://tools.Android.com/recent/androidstudio058released

layout/layout_merge.xml mit Werkzeugen: 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 mit 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