如何根据 viewState 值更改 ConstraintLayout verticalBias
How Can I change ConstraintLayout verticalBias according to viewState value
我有类似的 BindingAdapter;
@JvmStatic
@BindingAdapter("setVerticalBias")
fun ConstraintLayout.setVerticalBias(value: Float?) {
val cs = ConstraintSet()
cs.setVerticalBias(R.id.llResultContent, value ?: 0.1f)
cs.applyTo(this)
}
我的 viewState 中有一个条件,它管理浮点值,例如;
val constraintBias: Float
get() {
return if (hasSecondaryActions) {
0.1f
} else {
0.8f
}
}
然后我将它与我的绑定适配器一起使用,例如;
<LinearLayout
android:id="@+id/llResultContent"
setVerticalBias="@{viewState.constraintBias}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
所以我收到了这个错误
“找不到接受参数类型 'float' 的 的 setter
如果绑定适配器提供 setter,请检查适配器是否正确注释以及参数类型是否匹配。
打开文件
这里有什么问题我找不到!
setVerticalBias
是在 LinearLayout 而不是 ConstraintLayout 上设置的,即使 [=17= 使用了偏置]约束布局。将您的绑定适配器更改为以下内容:
@JvmStatic
@BindingAdapter("setVerticalBias")
fun LinearLayout.setVerticalBias(value: Float?) {
val constraintLayout = (this.parent as ConstraintLayout)
val cs = ConstraintSet()
cs.clone(constraintLayout)
cs.setVerticalBias(R.id.llResultContent, value ?: 0.1f)
cs.applyTo(constraintLayout)
}
或者,更一般地说:
@JvmStatic
@BindingAdapter("setVerticalBias")
fun LinearLayout.setVerticalBias(value: Float?) {
val constraintLayout = (this.parent as ConstraintLayout)
val cs = ConstraintSet()
cs.clone(constraintLayout)
cs.setVerticalBias(this.id, value ?: 0.1f)
cs.applyTo(constraintLayout)
}
我有类似的 BindingAdapter;
@JvmStatic
@BindingAdapter("setVerticalBias")
fun ConstraintLayout.setVerticalBias(value: Float?) {
val cs = ConstraintSet()
cs.setVerticalBias(R.id.llResultContent, value ?: 0.1f)
cs.applyTo(this)
}
我的 viewState 中有一个条件,它管理浮点值,例如;
val constraintBias: Float
get() {
return if (hasSecondaryActions) {
0.1f
} else {
0.8f
}
}
然后我将它与我的绑定适配器一起使用,例如;
<LinearLayout
android:id="@+id/llResultContent"
setVerticalBias="@{viewState.constraintBias}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
所以我收到了这个错误
“找不到接受参数类型 'float' 的
这里有什么问题我找不到!
setVerticalBias
是在 LinearLayout 而不是 ConstraintLayout 上设置的,即使 [=17= 使用了偏置]约束布局。将您的绑定适配器更改为以下内容:
@JvmStatic
@BindingAdapter("setVerticalBias")
fun LinearLayout.setVerticalBias(value: Float?) {
val constraintLayout = (this.parent as ConstraintLayout)
val cs = ConstraintSet()
cs.clone(constraintLayout)
cs.setVerticalBias(R.id.llResultContent, value ?: 0.1f)
cs.applyTo(constraintLayout)
}
或者,更一般地说:
@JvmStatic
@BindingAdapter("setVerticalBias")
fun LinearLayout.setVerticalBias(value: Float?) {
val constraintLayout = (this.parent as ConstraintLayout)
val cs = ConstraintSet()
cs.clone(constraintLayout)
cs.setVerticalBias(this.id, value ?: 0.1f)
cs.applyTo(constraintLayout)
}