如果值为true,则Android数据绑定设置填充

The*_*his 8 android android-layout android-studio android-databinding

如果布尔值为true,我希望能够设置填充值.问题是Android Studio无法解析布局,因为它认为2dp是一个值为2的小数,然后不知道如何处理p.我如何格式化它,以便它理解我的意思是2密度像素.

数据布局:

<data class=".ItemBinding">
    <variable name="isGroupType" type="Boolean"/>
</data>
Run Code Online (Sandbox Code Playgroud)

查看布局(重要):

<android.support.v7.widget.AppCompatImageView
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:paddingBottom='@{isGroupType ? 2dp : 0dp}'
            android:paddingTop='@{isGroupType ? 8dp : 0dp}'
            android:paddingRight='@{isGroupType ? 2dp : 0dp}'
            android:paddingLeft='@{isGroupType ? 2dp : 0dp}'/>
Run Code Online (Sandbox Code Playgroud)

Sar*_*tal 20

对于希望通过 DataBinding 设置边距的任何人,您还必须使用BindingAdapter

@BindingAdapter("layoutMarginBottom")
fun setLayoutMarginBottom(view: View, dimen: Float) {
    val layoutParams = view.layoutParams as MarginLayoutParams
    layoutParams.bottomMargin = dimen.toInt()
    view.layoutParams = layoutParams
}
Run Code Online (Sandbox Code Playgroud)

您的 xml 属性将如下所示:

app:layoutMarginBottom="@{someCondition ? @dimen/zero_dp : @dimen/twenty_dp}"
Run Code Online (Sandbox Code Playgroud)

  • 我会更改为 @BindingAdapter("android:layout_marginBottom") 这样它就可以在布局中与正常边距一起使用 (2认同)
  • @JanuszHain 是的,可以完成,我个人更喜欢将数据绑定内容与 android 命名空间分开 (2认同)

Rav*_*avi 15

存储填充值dimen.xml并使用它.请保持习惯用""(双引号)写绑定字符串

android:paddingBottom="@{isGroupType ? @dimen/padding_normal : @dimen/padding_null}"
Run Code Online (Sandbox Code Playgroud)

等等其他填充也.

  • 这仅适用于`margins`的paddings ** NOT ** (4认同)
  • 反之亦然,如果您在“”之间编写,也可以在其中使用“`”。 (3认同)

Zoo*_*gic 6

就像单挑一样,这不适用于layout_margin的:(

不知道为什么,但是认为是由于父布局需要重新测量。