2016-08-24 7 views
1

私はネイティブAndroidスタジオのデータバインディング機能をカスタムレイアウトと共に使用しようとしました。 マイカスタムレイアウトは次のようになります。カスタムビュー<merge>と<layout>タグ

public class MainNavigationEntryView extends LinearLayout { 

    private MainNavigationEntryBinding layoutBinding; 

    public MainNavigationEntryView(Context context) { 
     super(context); 
     init(context, null); 
    } 

    [...] 

    private void init(Context context, AttributeSet attrs) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     layoutBinding = MainNavigationEntryBinding.inflate(inflater, this, true); 
     [...] 
    } 
} 

マイレイアウトファイルは次のようになります。

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

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/imageIcon" 
      android:layout_width="@dimen/tabbar_icon_size" 
      android:layout_height="@dimen/tabbar_icon_size" 
      android:layout_marginTop="4dp" 
      android:background="@drawable/stateful_background_no_bounds" 
      android:gravity="center" 
      tools:ignore="contentDescription"/> 

     <ImageView 
      android:id="@+id/imageIndicator" 
      android:layout_width="@dimen/indicator_size_small" 
      android:layout_height="@dimen/indicator_size_small" 
      android:src="@drawable/background_circle_blue" 
      android:visibility="gone" 
      tools:visibility="visible" 
      tools:ignore="contentDescription"/> 

    </LinearLayout> 

</layout> 

ここでの問題は、私はネストされた2つのLinearLayoutを持っているということです。 <merge> tagを使用して縮小しようとしましたが、<layout><merge>タグを1つのレイアウトにまとめることはできないようです。

<layout><merge>タグを1つのレイアウトで一緒に使用する別の方法はありますか?

ありがとうございます。

答えて

0

<layout>タグを<merge>とネストすることはできません。

しかし、2つの入れ子になったLinearLayoutを避けるためにできることは1つあります。

あなたのレイアウト:

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

    <com.example.MyCustomView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/imageIcon" 
      android:layout_width="@dimen/tabbar_icon_size" 
      android:layout_height="@dimen/tabbar_icon_size" 
      android:layout_marginTop="4dp" 
      android:background="@drawable/stateful_background_no_bounds" 
      android:gravity="center" 
      tools:ignore="contentDescription"/> 

     <ImageView 
      android:id="@+id/imageIndicator" 
      android:layout_width="@dimen/indicator_size_small" 
      android:layout_height="@dimen/indicator_size_small" 
      android:src="@drawable/background_circle_blue" 
      android:visibility="gone" 
      tools:visibility="visible" 
      tools:ignore="contentDescription"/> 

    </com.example.MyCustomView> 
</layout> 

カスタムビュー:

public class MyCustomView extends LinearLayout { 

    private MyCustomViewBinding binding; 

    public MyCustomView(Context context) { 
     super(context); 
    } 

    [...] 

    @Override 
    protected void onFinishInflate() { 
     super.onFinishInflate(); 

     binding = MyCustomViewBinding.bind(this); 
    } 

}