我尝试将原生Android Studio数据绑定功能与自定义布局结合使用。 我的自定义布局如下所示:
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 :(得分: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);
}
}