gpt4 book ai didi

android - 数据绑定(bind)布局约束

转载 作者:搜寻专家 更新时间:2023-11-01 09:22:35 24 4
gpt4 key购买 nike

我在添加结束约束以查看时遇到问题

 <android.support.constraint.ConstraintLayout
android:id="@+id/chatDocumentMessageContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@{chatMessage.corespondent==Corespondent.Sent? @drawable/very_rounded_corners_gray_background:@drawable/very_rounded_corners_orange_background}"
android:maxWidth="300dp"
android:minWidth="140dp"
android:onClick="@{clickListener::onClick}"
android:padding="@dimen/padding_large"
app:layout_constraintEnd_toEndOf="@{chatMessage.corespondent==Corespondent.Sent? ConstraintSet.PARENT_ID:ConstraintSet.UNSET}">

我遇到了这个错误:

[kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors. ****/ data binding error ****msg:Cannot find the setter for attribute 'app:layout_constraintEnd_toEndOf' with parameter type int on android.support.constraint.ConstraintLayout.

尝试添加以下适配器,但仍然无法正常工作:

 @BindingAdapter(" app:layout_constraintEnd_toEndOf")
fun setEndConstraint(guideline: Guideline, resource: Int) {
val params = guideline.getLayoutParams() as ConstraintLayout.LayoutParams
params.endToEnd = resource
guideline.layoutParams = params
}

最佳答案

我为这种情况创建了一个 BindingAdapter:

@BindingAdapter(
"layout_conditionalConstraint_startSide",
"layout_conditionalConstraint_toEndId",
"layout_conditionalConstraint_endSide",
"layout_conditionalConstraint_condition"
)
fun setConditionalConstraint(
view: View, startSide: Int, endId: Int, endSide: Int, condition: Boolean
) {
val constraintLayout = (view.parent as? ConstraintLayout) ?: return
with(ConstraintSet()) {
clone(constraintLayout)
if (condition) connect(view.id, startSide, endId, endSide)
else clear(view.id, startSide)
applyTo(constraintLayout)
}
}

在您的情况下,您可以这样使用它:

<android.support.constraint.ConstraintLayout
android:id="@+id/chatDocumentMessageContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@{chatMessage.corespondent == Corespondent.Sent ? @drawable/very_rounded_corners_gray_background : @drawable/very_rounded_corners_orange_background}"
android:maxWidth="300dp"
android:minWidth="140dp"
android:onClick="@{clickListener::onClick}"
android:padding="@dimen/padding_large"
app:layout_conditionalConstraint_startSide="@{ConstraintSet.END}"
app:layout_conditionalConstraint_toEndId="@{ConstraintSet.PARENT_ID}"
app:layout_conditionalConstraint_endSide="@{ConstraintSet.END}"
app:layout_conditionalConstraint_condition="@{chatMessage.corespondent == Corespondent.Sent}">

但在大多数情况下,您应该能够使用 ConstraintLayout 提供的功能获得所需的布局,此 BindingAdapter 仅在少数极端情况或复杂布局中有用。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com