我正在使用Android的绑定库,我试图在TextView上添加或删除边距,具体取决于布尔值。如果这是真的,我希望TextView在右边有一个边距,在左边没有边距,如果不是则相反。所有其他资源工作正常,但是当我编译代码时,我得到关于TextView上的边距的错误:无法找到参数类型为float的属性'android:layout_marginRight'的setter。
有人能发现错误吗?
这是我的xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="comment" type="mx.com.corpogas.dataModels.FeedbackComment"/>
<import type="android.view.View"/>
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@{comment.isMine ? @drawable/comment_background_white : @drawable/comment_background_green}"
android:textSize="15sp"
android:textColor="@{comment.isSent ? (comment.isMine ? @color/colorPrimaryDark : @android:color/white) : @color/unsent_text}"
android:layout_marginRight="@{comment.isMine ? @dimen/feedback_comment_margin : @dimen/feedback_comment_no_margin}"
android:layout_marginLeft="@{comment.isMine ? @dimen/feedback_comment_no_margin : @dimen/feedback_comment_margin}"
android:text="@{comment.content}"/>
</layout>
这是我的利润:
<dimen name="feedback_comment_margin">16dp</dimen>
<dimen name="feedback_comment_no_margin">0dp</dimen>
当我删除边距时,程序会编译并完美运行。
答案 0 :(得分:10)
不支持布局属性的数据绑定,但您可以自己在技术上添加它们。问题是这些可能很容易被试图动画它们的人滥用。要为您的应用程序实现这些,请创建一个绑定适配器:
np.savetxt('file3', a3, fmt='%d')
答案 1 :(得分:0)
以下是科特林中的一个示例。通过Android数据绑定库在ContraintLayout中动态设置边距。之所以使用dimens.xml
是因为将值直接放在绑定表达式中会导致语法错误:msg:Syntax error: extraneous input 'p' expecting {}
布局:
<android.support.constraint.ConstraintLayout
[...]
android:layout_marginBottom="@{viewModel.isMarginVisible ? @dimen/default_margin : @dimen/no_margin}"
</>
MarginBindingAdapter:
/**
* Data Binding adapters for UI margins
*/
@BindingAdapter("android:layout_marginTop")
fun ViewGroup.setMarginTopValue(marginValue: Float) =
(layoutParams as ViewGroup.MarginLayoutParams).apply { topMargin = marginValue.toInt() }
@BindingAdapter("android:layout_marginBottom")
fun ViewGroup.setMarginBottomValue(marginValue: Float) =
(layoutParams as ViewGroup.MarginLayoutParams).apply { bottomMargin = marginValue.toInt() }
@BindingAdapter("android:layout_marginStart")
fun ViewGroup.setMarginStartValue(marginValue: Float) =
(layoutParams as ViewGroup.MarginLayoutParams).apply { leftMargin = marginValue.toInt() }
@BindingAdapter("android:layout_marginEnd")
fun ViewGroup.setMarginEndValue(marginValue: Float) =
(layoutParams as ViewGroup.MarginLayoutParams).apply { rightMargin = marginValue.toInt() }