【问题标题】:HTML formatting in Android's new data binding libraryAndroid 新数据绑定库中的 HTML 格式
【发布时间】:2015-08-03 01:55:32
【问题描述】:

使用 Android 的新 data binding library,我是否可以仅通过 XML 为 TextView 使用 HTML 格式,还是必须以编程方式使用 Html.fromHtml

【问题讨论】:

    标签: android data-binding


    【解决方案1】:

    你必须先导入 Html 然后调用 fromHtml 方法:

    <data>
        <import type="android.text.Html"/>
    </data>
    …
    <TextView
        android:text="@{Html.fromHtml(@string/my_html)}"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    

    【讨论】:

    • 这是正确的答案,除非您有在特定时间可能为空的动态数据,这将导致 NPE From Binding 类(由 fromHtml 本身抛出)。所以@Fragment 和 remy 的答案在任何情况下都是完美的。
    【解决方案2】:

    如果你想使用带有html标签的字符串并将其与字符串参数结合起来,可以这样完成:

    在布局中:

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{activity.formattedString}" />
    

    在您的活动中(例如):

    public CharSequence getFormattedString() {
        if(selectedItem == null) return null;
        String str = String.format(Html.toHtml(SpannedString.valueOf(this.getResources().getText(R.string.your_tagged_string))), parameter);
        return Html.fromHtml(str);
    }
    

    【讨论】:

      【解决方案3】:

      不应在视图中进行转换。视图模型用于在原始模型和视图之间进行转换操作。

      所以我宁愿那样做:

      <data>
        <variable
        name="viewModel"
        type="yourpackage.YourViewModel"/>
      </data>
      …
      <TextView
         android:text="@{viewModel.htmlText}"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
      

      在您的视图模型中:

      private Model model; // your model
      
      public Spanned getHtmlText(){
          return Html.fromHtml(model.htmlText);
      }
      

      【讨论】:

      • 我认为这种解决方案违反了视图模型中api元素独立性的原则,因为Spanned和Html是来自Android API的元素,那么当你要测试这个时,你需要使用模拟器或实际设备
      【解决方案4】:

      我有一个更优雅、更高效和可重复使用的答案here 涵盖了这个特定场景

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        • 1970-01-01
        • 2017-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多