假设我的视图可能是RelativeLayout
中心垂直对齐的视图。我想使用数据绑定来实现这一目标。
android:layout_centerVertical="@{data.shouldCenter ? true : false}"
我使用上述内容获得data binding error ****msg:Identifiers must have user defined types from the XML file. center is missing it ****\ data binding error ****
。我应该如何让它工作?
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="data"
type="com.test.MainViewModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.title}"
android:layout_centerVertical="@{data.shouldCenter ? true : false}"
android:textColor="@{data.titleTextColor}"
android:visibility="@{data.title != null ? View.VISIBLE : View.GONE}" />
<TextView
android:id="@+id/msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:layout_marginLeft="@dimen/marginLarge"
android:layout_marginTop="@dimen/marginSmall"
android:text="@{data.message}"
android:visibility="@{data.message != null ? View.VISIBLE : View.GONE}" />
</RelativeLayout>
</layout>
答案 0 :(得分:1)
你必须打电话给方法。不要在数据绑定中使用直接变量。所以你必须用下面的代码替换你的代码。
android:layout_centerVertical="@{data.shouldCenter() ? true : false}"
你必须在你的模型上创建getter方法,如下所示:
boolean shouldCenter;
public boolean shouldCenter() {
return shouldCenter;
}
这对我有用。检查一下,看看它是否有效!
答案 1 :(得分:1)
我有另一个解决方案,即使用BindingAdapter
@BindingAdapter(" android:layout_centerVertical")
public static void setCenterVertical(View view, boolean isCenterVertical) {
RelativeLayout.LayoutParams layoutParams =
(RelativeLayout.LayoutParams) view.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT,
isCenterVertical ? RelativeLayout.TRUE : 0);
view.setLayoutParams(layoutParams);
}
并将其用作:
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.title}"
android:layout_centerVertical="@{data.shouldCenter}"
android:textColor="@{data.titleTextColor}"
android:visibility="@{data.title != null ? View.VISIBLE : View.GONE}" />
希望这会有所帮助