如何使用Android view数据绑定格式化double?

如何使用Android view数据绑定格式化double?,android,Android,假设我有一个地震类,它有一个字段公共最终双震级,我的布局与此类似: <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="earthquake" type="com.example.Earthquake"/> </data> <LinearLayout andr

假设我有一个
地震
类,它有一个字段
公共最终双震级,我的布局与此类似:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="earthquake" type="com.example.Earthquake"/>
    </data>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="48dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@{String.format(earthquake.magnitude)}" />
        ...
    </LinearLayout>
</layout>

...
注意:我必须使用
“@{String.format(地震.震级)}”
来使用此字段,否则我会得到以下错误:

在参数类型为double的android.widget.TextView上找不到属性“android:text”的setter


不幸的是,这会导致双精度打印。如何格式化显示的双精度值?

我还没有在M SDK预览中查看绑定表达式语言,因此我可能会马上得出结论,但如果这调用了正常的
String.format()
方法,那么它需要一个模式。你试过这个吗

android:text='@{String.format("%.1f", earthquake.magnitude)}'
String.valueOf()也是一个选项:

android:text="@{String.valueOf(earthquake.magnitude)}"

String.format在xml中不起作用。我为它创建了一个getter方法,用于格式化它的值

data class CrpyoCoin(
    val id: Long,
    val symbol: String,
    val iconUrl: String,
    val price: Double,
    val change: Float
) {
    val readablePrice: String
        get() = String.format("%.2f", price)

}
然后我只调用可读值。我认为这是处理数据更清晰的方式

  <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@{coin.readablePrice}"
        android:textColor="@android:color/black"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/guideline"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="121.12" />


比我先回答我自己的问题!我没有意识到我可以对XML属性值使用单引号。我发现它是在文档中描述的。除了你接受的答案之外,另一种方法是考虑绑定不是<代码>地震<代码>,但也许更多的是沿着<代码> EarthquakeViewModel < /代码>。我远非MVVM专家,但我对“视图模型”的解释是,它具有视图将使用的数据表示形式
EarthquakeViewModel
可能具有返回格式化字符串的
getMagnitude()
,因此格式化逻辑不在布局XML资源中。我并不是说这是好是坏,但这是我看到你的问题,在得到答案之前的最初反应。