我有以下布局(仅剩下相关部分):
<RelativeLayout>
<View android:layout_alignParentTop="true"/>
</RelativeLayout>
我尝试使用layout_alignParentTop
块中声明的变量设置<data>
属性,如下所示:
<data>
<variable
name="condition"
type="Boolean"/>
</data>
<RelativeLayout>
<View android:layout_alignParentTop="@{condition}"/>
</RelativeLayout>
但是在尝试编译时,android studio会说:
错误:找不到参数类型为java.lang.Boolean的属性'android:layout_alignParentTop'的setter。
如何使用数据绑定变量设置layout_alignParentTop
属性?
答案 0 :(得分:14)
我必须深入研究这一点,并在Google Code中找到了recent issue。
引用其中一位项目成员:
我们明确地不支持布局属性的数据绑定, 虽然你可以在技术上自己添加它们。问题是 这些可能很容易被试图制作动画的人滥用。
要为您的应用程序实现这些,请创建一个绑定适配器:
@BindingAdapter("android:layout_width") public static void setLayoutWidth(View view, int width) { LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = width; view.setLayoutParams(layoutParams); }
在您的情况下,您只需要为alignParentTop
属性稍微调整一下:
@BindingAdapter("android:layout_alignParentTop")
public static void setAlignParentTop(View view, boolean alignParentTop) {
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
if(alignParentTop) {
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
}
view.setLayoutParams(layoutParams);
}
这是未经测试的,但它应该足以让你走上正确的轨道。
答案 1 :(得分:1)
@BindingAdapter("android:layout_alignParentLeft")
public static void setAlignParentLeft(View view, boolean alignParentLeft) {
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
view.getLayoutParams()
);
if (alignParentLeft) {
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
}
view.setLayoutParams(layoutParams);
}
此代码更通用,并且不为每个视图应用wrap_content