2017-01-11 6 views
0

私は現在、<include>のレイアウトとそれらのための義務的な<layout>タグで苦労しています。Androidデータバインディング:力<layout>タグを含む?

私は、データバインディングを使用しているかどうかにかかわらず、他のアーティファクトによって使用されるべきツールバーのレイアウトを定義するライブラリを持っています。

データバインディングを機能させるには、ツールバーのレイアウトを<layout>タグ内で折り返す必要があります。

したがって、私はツールバーレイアウトの2つの異なるインクルードを作成しました。

include_toolbar.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    .../> 

私は定義されたツールバーを再利用し、この

include_toolbar_binding.xmlのようなレイアウトタグでそれをラップしてみました:

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <include 
     android:id="@+id/wrapper" 
     layout="@layout/include_toolbar"/> 
</layout> 

しかし、それは働いていません、これを含めると、再度ラップする必要があるからです。

(ラップされた)バインディングインクルードにツールバーを再度定義する必要のないソリューションはありますか?

答えて

0

結論:<include>をルートタグとして使用することはできません。 (親が<merge>の場合も同様です)。 したがって、私は両方のレイアウトでツールバーを別々に定義する必要があります。

0

<merge>を使用することを検討する必要があります。

あなたtoolbar.xmlは次のようになります。

<merge> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     .../> 
</merge> 

出典:https://developer.android.com/training/improving-layouts/reusing-layouts.html

+0

そのように動作していない、上記の回答を参照してください。 – cwiesner

1

Androidはルートなどのタグを含んでサポートしていません。私は、データバインディングがマージタグをルートのインクルードフラグでサポートしているかどうかを覚えていないが、そうは思わない。あなたはそれを試してみることができます。サポートされていない場合は、通常はAndroidがサポートしているため、データのバインドのみです。

あなたは使用することができます。

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android=...> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    .../> 
</layout> 

ツールバーのために。その後、通常のデータローダーを結合して、それをロードするために選択することができます。

IncludeLoaderBinding binding = IncludeLoaderBinding.inflate(inflater, ...); 

か、インフレを結合非データを使用することができます。それよう

View included = inflater.inflate(...); 

Androidのデータバインディングは、適切にレイアウトファイルを削除しますデータバインディングなしで使用できます。文字列タグが置き換えられ、バインディング式が取り除かれるときに文字列タグを使用すると、いくつかの問題が発生することがあります。前述のプレーンレイアウトを使用している場合は、データバインディングレイアウトファイルと非データバインディングレイアウトファイルの両方から問題が発生することはありません。

- 編集 -

私は1つのアプリケーションがデータを有効にバインディングがないことを理解したコメントに基づいており、これはサポートされません。データバインディングを使用してツールバーへのフィールドアクセスを取得し、非データバインディングプロジェクトをサポートする場合、この結合レイアウトは機能しません。ツールバーへのフィールドアクセスが必要ない場合は、データバインディングレイアウトファイルから非データバインディングレイアウトファイルを含めることができます。

+0

を使用している ''は動作しません。 「」タグを含むことはできません。レイアウトをxmlファイルに含めて、コードを使ってそれを膨張させたくないからです。 – cwiesner

+0

別のレイアウトにも含めることができます。 –

+0

私は、**データバインディングを使用するかもしれない**かもしれないアプリケーションによって使用されるライブラリでこのレイアウトを定義しています。もし彼らが私は ''タグでそれをラップすることはできません。 – cwiesner

関連する問題