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

时间:2015-05-31 20:01:47

标签: android

假设我有一个Earthquake类,其中包含一个字段public final double magnitude;,我的布局与此类似:

<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(earthquake.magnitude)}"来使用此字段,否则我会收到此错误:

  

无法找到属性&#39; android:text&#39;的setter在android.widget.TextView上,参数类型为double。

不幸的是,这导致双重打印的完全准确性。如何格式化显示的double值?

3 个答案:

答案 0 :(得分:25)

我还没有看过M SDK预览中的绑定表达式语言,所以我可能会得出结论,但如果调用普通的String.format()方法,那么它需要一个模式。你试过这个吗?

android:text='@{String.format("%.1f", earthquake.magnitude)}'

答案 1 :(得分:0)

String.valueOf()也是一个选项:

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

答案 2 :(得分:0)

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" />