带数据绑定的 ConstraintLayout
ConstraintLayout with databinding
是否可以这样做:
Xml:
<android.support.constraint.Guideline
app:layout_constraintGuide_percent="@{viewModel.guidelinePercent}"
/>
视图模型:
@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 但它没有改变值:
视图模型:
@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}"/>
顺便说一句,谢谢你的想法。我一直想要一种更简单的方法来以编程方式调整准则。
您正在创建的 ConstraintSet
应该在设置百分位数后的某个时间设置为 ConstraintLayout
。
@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);
}
是否可以这样做:
Xml:
<android.support.constraint.Guideline
app:layout_constraintGuide_percent="@{viewModel.guidelinePercent}"
/>
视图模型:
@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 但它没有改变值:
视图模型:
@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}"/>
顺便说一句,谢谢你的想法。我一直想要一种更简单的方法来以编程方式调整准则。
您正在创建的 ConstraintSet
应该在设置百分位数后的某个时间设置为 ConstraintLayout
。
@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);
}