android - 带数据绑定(bind)的 ConstraintLayout

标签 android android-databinding android-constraintlayout

是否有可能做这样的事情:

xml:

        <android.support.constraint.Guideline
             app:layout_constraintGuide_percent="@{viewModel.guidelinePercent}"
        />

View 模型:
  @Bindable
    public float getGuidelinePercent() {
        return condition ? 0.6f : 0.8f;
    }

我收到此错误:

Cannot find the setter for attribute 'app:layout_constraintGuide_percent' with parameter type float on android.support.constraint.Guideline.



我已经尝试过使用 BindingAdaptor 但它不会改变值:

View 模型:
@BindingAdapter(value = {"constraintPercent"})
public static void setConstraintPercent(Guideline view, float percent){
    ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.setGuidelinePercent(view.getId(), percent);
}

xml:
<android.support.constraint.Guideline
                 app:constraintPercent="@{viewModel.guidelinePercent}"
            />

有什么想法吗?
谢谢。

最佳答案

此问题可能与 Android Databinding cannot set the layout_width (layout_height) property 有关.在任何情况下,将以下代码添加到 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);
}

您的 Guideline 的 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}"/>

顺便说一句,感谢这个想法。我一直想要一种更简单的方法来以编程方式调整指南。

关于android - 带数据绑定(bind)的 ConstraintLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44845121/

相关文章:

android - 数据绑定(bind) : Pass resource id to custom view string attribute?

android - ConstraintLayout 上的 setLayoutParams 不改变大小

android - 改变 View 可见性的约束

android - IllegalStateException : function = <anonymous>, 计数 = 3,索引 = 3

java - 如何在 android 中发布带有文件上传的键/值对

android - Android Studio 3.1 中的消息窗口在哪里

android - 使用 YoutubeFragment 时隐藏状态栏(YoutubePlayer android API)

Android View 绑定(bind) - 多模块项目中 Unresolved 引用

android - 如何将 DiffUtil 与多种 View 类型一起使用

android - 在Activity而不是布局上使用dataBinding