如何使用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资源中。我并不是说这是好是坏,但这是我看到你的问题,在得到答案之前的最初反应。