Android 带数据绑定的ConstraintLayout
是否可以这样做:Android 带数据绑定的ConstraintLayout,android,android-databinding,android-constraintlayout,Android,Android Databinding,Android Constraintlayout,是否可以这样做: <android.support.constraint.Guideline android:id="@+id/guideline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGui
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="@{viewModel.guidelinePercent}"/>
Xml:
我得到了这个错误:
找不到属性的setter
参数类型为float on的“app:layout_constraintGuide_percent”
android.support.constraint.Guideline
我尝试了BindingAdapter,但它没有改变值:
视图模型:
@BindingAdapter(value = {"constraintPercent"})
public static void setConstraintPercent(Guideline view, float percent){
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.setGuidelinePercent(view.getId(), percent);
}
Xml:
有什么想法吗?谢谢。此问题可能与。在任何情况下,请将以下代码添加到
ViewModel
:
public float getGuidelinePercent() {
return 0.5f; // Of course, this default could be anything you want.
}
@BindingAdapter("layout_constraintGuide_begin")
public static void setLayoutConstraintGuideBegin(Guideline guideline, float percent) {
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) guideline.getLayoutParams();
params.guidePercent = percent;
guideline.setLayoutParams(params);
}
您的指南的XML将如下所示:
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="@{viewModel.guidelinePercent}"/>
顺便说一句,谢谢你的想法。我一直希望有一种更简单的方法以编程方式调整指南。您正在创建的约束集应在设置百分比后的某个时间设置为约束列表
@BindingAdapter(value = {"constraintPercent"})
public static void setConstraintPercent(Guideline view, float percent){
ConstraintLayout constraintLayout = (ConstraintLayout) view.getParent();
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
constraintSet.setGuidelinePercent(view.getId(), percent);
constraintLayout.setConstraintSet(constraintSet);
}
谢谢,这就是方法,改变指南布局参数。是的,在Bindable的帮助下使用BindAdapter来提供参数值是一个强大的武器,也是使任何视图配置“可数据绑定”的唯一方法:)@GuilhE我确实在解决setter错误,但我想LayoutParams
code是一个额外的好处这种精练的技术可以在点击监听器中使用,例如动态显示/隐藏指南左侧的所有内容!!!
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="@{viewModel.guidelinePercent}"/>
@BindingAdapter(value = {"constraintPercent"})
public static void setConstraintPercent(Guideline view, float percent){
ConstraintLayout constraintLayout = (ConstraintLayout) view.getParent();
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
constraintSet.setGuidelinePercent(view.getId(), percent);
constraintLayout.setConstraintSet(constraintSet);
}