如何在 DataBinding 的 BindingAdapter 方法中提供默认值 Android
How provide default value in BindingAdapter method in DataBinding Android
我正在研究绑定适配器方法以在 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?
bindingAdapters 中没有默认值。生成的 class 在 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
}
我正在研究绑定适配器方法以在 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?
bindingAdapters 中没有默认值。生成的 class 在 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
}