如何在DataBinding Android中的BindingAdapter方法中提供默认值

问题描述 投票:5回答:1

我正在使用绑定适配器方法来设置TextView中的颜色范围。

@BindingAdapter("foregroundColorSpan", "start", "end", requireAll = false)
fun TextView.setForegroundColorSpan(color: Int, start: Int = 0, end: Int = text.length - 1) {
    val spanBuilder = SpannableStringBuilder(text)
    spanBuilder.setSpan(ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    text = spanBuilder
}

这是我的使用方式

<TextView
        android:id="@+id/loginLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="@dimen/narrow"
        android:text="@string/already_have_account_login"
        android:textColor="@color/grey_aee4e4e4"
        android:textSize="@dimen/text_size_small"
        app:foregroundColorSpan="@{@color/blue_ae12235b}"
        app:start="@{25}" />

我似乎无法将end作为参数默认值指定为TextView中文本的最后一个索引

我是否可以使用任何替代方法来从参数获取默认值,而不必检查该值是否为0?

android android-layout kotlin android-databinding android-binding-adapter
1个回答
0
投票

bindingbindings中没有默认值。生成的类使用Java,如果requireAll设置为false,则未通过编程设置的所有内容都将为null,false(对于布尔值)或0(对于数字)。因此,为了正常工作,您的BindingAdapter函数应类似于:

@BindingAdapter(
    value = ["foregroundColorSpan", "start", "end"],
    requireAll = false
)
fun TextView.setForegroundColorSpan(color: Int, start: Int?, end: Int?) {
    val startValue = start ?: 0
    val endValue = end ?: text.length - 1
    val spanBuilder = SpannableStringBuilder(text)

    spanBuilder.setSpan(ForegroundColorSpan(color), startValue, endValue, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    text = spanBuilder
}
© www.soinside.com 2019 - 2024. All rights reserved.