web-dev-qa-db-ja.com

Intellij IDEA / Android Studioのマージルートタグを使用したレイアウトのプレビュー

LinearLayoutに基づいた複合コンポーネントを開発しているとします。したがって、次のようなクラスを作成します。

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

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

LinearLayoutsomelayout.xmlのルートとして使用する場合、追加のビューレベルがあるため、mergeタグを使用します。

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

ただし、[プレビュー]タブのIDE mergeは常にFrameLayoutとして機能し、次のようなものが表示されます。 Preview with merge

(Android Studio、Intellij IDEAはちょうど同じですが、Eclipseについては知りません)

プレビューはレイアウトの開発を大幅にスピードアップしますが、いくつかのレイアウトでもこのような大きな助けを失うのは悲しいことです。特定のレイアウトでmergeタグをPreviewがどのように解釈するかを指定する方法がありますか?

134
darja

新しいparentTagツール属性( added in Android Studio 2.2 )があり、マージタグのレイアウトタイプを指定するために使用できます。これにより、レイアウトがレンダリングされます。レイアウトエディターのプレビューで正しく。

あなたの例を使用して:

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

:両方Android:layout_widthおよびAndroid:layout_heightは、レイアウトがエディターで正しく表示されるように指定する必要があります。

298
starkej2

編集:古い回答。 starkej2による回答を参照してください。


Android Studio 0.5.8では、tools:showInのサポートが追加されました。これを使用することにより、<merge>レイアウトをプレビューできます。

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

tools:showInを使用したlayout/layout_merge.xml

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

<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