2016-08-24 2 views
1

사용자 정의 레이아웃과 함께 기본 Android Studio 데이터 바인딩 기능을 사용하려고했습니다. 내 사용자 지정 레이아웃은 다음과 같이 :<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> 

여기서 문제는 내가 두 개의 중첩의 LinearLayout을 가지고있다. <merge> tag을 사용하여 줄이려고했지만 <layout><merge> 태그를 하나의 레이아웃에 함께 사용할 수없는 것으로 보입니다.

<layout><merge> 태그를 하나의 레이아웃에 함께 포함시키는 다른 방법이 있습니까?

미리 감사드립니다.

답변

0

<layout> 태그가 <merge>으로 중첩되어 있다고 생각하지 않습니다.

하지만 중첩 된 두 개의 LinearLayout을 피하기 위해 할 수있는 일이 있습니다.

레이아웃 :

<?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); 
    } 

} 
관련 문제