如何访问 JetpackCompose 字符串中的复数资源

Ely*_*lye 21 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>
Run Code Online (Sandbox Code Playgroud)

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

Text(text = stringResource(R.string.loading_listing, 1))
Run Code Online (Sandbox Code Playgroud)

但如果我使用plurals

Text(text = stringResource(R.plurals.loading_listing, 1))
Run Code Online (Sandbox Code Playgroud)

它会崩溃

    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)
Run Code Online (Sandbox Code Playgroud)

我认为这不是stringResource(...)我可以使用的。之后怎么样了?

ngl*_*ber 27

撰写1.2

从 Jetpack Compose 1.2 开始,有一个pluralStringResource函数。

pluralStringResource(id = R.plurals.loading_listing, count = 1)
Run Code Online (Sandbox Code Playgroud)

该版本是实验性API,需要添加注解@ExperimentalComposeUiApi

1.2 之前的答案

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

pluralStringResource(id = R.plurals.loading_listing, count = 1)
Run Code Online (Sandbox Code Playgroud)


Gab*_*tti 5

从 Compose 1.2 开始,您可以使用该pluralStringResource函数。

pluralStringResource(R.plurals.plurals_array, 1)
Run Code Online (Sandbox Code Playgroud)

没有1.1.x获取复数资源的功能。

你可以使用类似的东西:

val resources = LocalContext.current.resources

Text(
    text = resources.getQuantityString(
        R.plurals.loading_listing, 0, 10
    )
)
Run Code Online (Sandbox Code Playgroud)