有一个androidx.compose.ui.res包,其中包含用于加载字符串资源以及其他资源类型的函数。
字符串
你可以使用stringResource()
函数来获取一个字符串,例如:
...
import androidx.compose.ui.res.stringResource
@Composable
fun StringResourceExample() {
Text(
text = stringResource(R.string.app_name)
)
Text(
text = stringResource(R.string.greeting, "World")
)
}
字符串数组
可以使用stringArrayResource()
函数获取:
val planets = stringArrayResource(R.array.planets_array)
复数形式(数量字符串)
从compose 1.0.0-alpha10
版本开始,没有内置的获取复数资源的函数,但是您可以通过LocalContext获取android上下文,并像在基于视图的应用程序中一样使用它。如果您创建类似于其他资源函数(例如Jetcaster compose示例)的自己的函数,则会更好:
package com.myapp.util
import androidx.annotation.PluralsRes
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
@Composable
fun quantityStringResource(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): String {
return LocalContext.current.resources.getQuantityString(id, quantity, *formatArgs)
}
因此,您可以以相同的方式使用它:
val likes = quantityStringResource(R.plurals.likes, 10, 10)
关于重组的说明
如您所知,在组合中,可组合函数可能会在重新组成期间被重新执行数百次。如果您构建的字符串不是简单的,并且需要一些计算,则最好记住计算结果,以便在每次重新组合时不会重新执行。例如:
...
import androidx.compose.runtime.remember
@Composable
fun BirthdayDateComposable(username: String, dateMillis: Long) {
val dateStr = remember(dateMillis) {
formatDate(dateMillis)
}
Text(
text = stringResource(R.string.birthday_date, dateStr)
)
}