如何在 JetpackCompose String 中访问多个资源

时间:2021-03-24 10:06:50

标签: android android-jetpack-compose

我有以下

    <string name="loading_listing">Loading listings %d</string>
    <plurals name="loading_listing">
        <item quantity="one">Found %d listing</item>
        <item quantity="other">Found %d listings</item>
    </plurals>

如果我使用 string,如下所示都可以

Text(text = stringResource(R.string.loading_listing, 1))

但是如果我使用 plurals

Text(text = stringResource(R.plurals.loading_listing, 1))

它会崩溃

    android.content.res.Resources$NotFoundException: String resource ID #0x7f0d0003
        at android.content.res.Resources.getText(Resources.java:444)
        at android.content.res.Resources.getString(Resources.java:537)
        at android.content.res.Resources.getString(Resources.java:561)
        at androidx.compose.ui.res.StringResources_androidKt.stringResource(StringResources.android.kt:48)

我认为我不能使用 stringResource(...)。那是什么?

2 个答案:

答案 0 :(得分:1)

1.0.0-beta04 没有获取复数资源的函数。

它不是那么优雅,但您可以使用以下内容:

 Text(text = LocalContext.current.resources.getQuantityString(R.plurals.loading_listing,0,10))

答案 1 :(得分:0)

同时它在 Compose 库中不可用,您可以为此创建一个辅助函数...

@Composable
fun pluralResource(
    @PluralsRes resId: Int,
    quantity: Int,
    vararg formatArgs: Any? = emptyArray()
): String {
    return LocalContext.current.resources
        .getQuantityString(resId, quantity, *formatArgs)
}