代码之家  ›  专栏  ›  技术社区  ›  HelloCW

使用数据绑定时,如何格式化字符串?

  •  0
  • HelloCW  · 技术社区  · 3 年前

    aDetailViewModel.size LivaData<Int> ,代码A显示文件的大小,它工作得很好。

    我希望为szie显示一个单位,但代码B不起作用,我该如何修复它?

    代码A

     <TextView
                android:id="@+id/tvFileSizeValue"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/myDetailContent"
                android:text="@{String.valueOf(aDetailViewModel.size)}" />
    

    代码B

     <TextView
                    android:id="@+id/tvFileSizeValue"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/myDetailContent"
                    android:text="@{String.valueOf(aDetailViewModel.size)+ "Kb"}" />
    

    添加内容

    谢谢!

    以下代码可以很好地工作。

    但还有更简单的方法吗?

    <string name="formatSizeToString">%1d KB</string>   
    
    android:text="@{@string/formatSizeToString(aDetailViewModel.aMVoiceForEdit.size)}"
    
    0 回复  |  直到 3 年前
        1
  •  2
  •   hakim    3 年前

    您可以使用静态函数并在xml中调用它。例如在文件中 字符串格式化工具.kt

    fun formatString(size: Int): String {
       return "$size kb"
    }
    

    然后在xml中导入它

    <layout>
    <data>
       <import type="com.path.to.the.package.StringFormatter" />
        // your viewmodel variable here
        // etc
    </data>
    <TextView
                    android:id="@+id/tvFileSizeValue"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/myDetailContent"
                    android:text="@{StringFormatter.formatString(aDetailViewModel.size)}" />
    
    </layout>