Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带数据绑定的ConstraintLayout_Android_Android Databinding_Android Constraintlayout - Fatal编程技术网

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