【问题标题】:Is it possibile to use extension functions in databinding?是否可以在数据绑定中使用扩展功能?
【发布时间】:2021-11-03 09:54:00
【问题描述】:

我想通过数据绑定将一些数据html化并在文本视图中设置?有可能吗?

ie.如果我有这样的扩展功能

 fun TextView.htmlText(txt: String?) {

txt.let {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml(txt, Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml(txt)
    }
 
}

}

我怎样才能把这个扩展函数放在数据绑定中而不是这个 android:text="@{model.text}"

【问题讨论】:

  • 尝试为此制作一个自定义绑定适配器。
  • @BilalNaeem 谢谢

标签: android kotlin textview extension-methods android-databinding


【解决方案1】:

我是使用绑定适配器完成的

 @BindingAdapter("app:text")
@JvmStatic
fun htmlText(view: TextView, text: String?) {
    text?.let {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            view.text = Html.fromHtml(it.trim(), Html.FROM_HTML_MODE_COMPACT)
        } else {
            view.text = Html.fromHtml(it.trim())
        }
    }
}

像这样。

【讨论】:

    【解决方案2】:
    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
    
            <import type="android.text.Html" />
    
            <import type="android.os.Build" />
    
            <variable
                name="model"
                type="com.login.LoginViewModel" />
    
        </data>
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text='@{Build.VERSION.SDK_INT> Build.VERSION_CODES.N?Html.fromHtml(model.text, Html.FROM_HTML_MODE_COMPACT):Html.fromHtml(model.text)}' />
    
    
    </layout>
    

    【讨论】:

    • 请解释您的解决方案。没有解释且只有代码的答案会被标记为低工作量。
    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2021-10-16
    • 2017-07-19
    相关资源
    最近更新 更多