Lil*_*oke 12 kotlin android-jetpack-compose android-compose-textfield
我有一个可以在任何地方Jetpack Compose使用的应用程序stringResource,并且非常适合localization.
但是,我有一些不是Composable函数的函数,我想从resources. 当我尝试stringResource在这些函数中使用时,它告诉我它只能在可组合项中使用。
那么,如果我不是可组合函数,如何从资源中获取字符串?
z.g*_*g.y 11
不知道我理解是否正确,但是是这样的吗?
@Composable
fun Composable() {
val context = LocalContext.current
val someString = NonComposable(context)
}
fun NonComposable(context: Context): String =
context.resources.getString(R.string.app_name)
Run Code Online (Sandbox Code Playgroud)
建议:您还可以定义sealed class具有 2 种类型的 ,您可以在其中提供所需的字符串参数,一个是实际String value参数,一个String resource是您可以指定如何解析它们的参数。
UiText
sealed class UiText {
data class StringValue(val str: String): UiText()
class StringResource(
@StringRes val resourceId: Int,
vararg val args: Any
): UiText()
@Composable
fun asString(): String {
return when (this) {
is StringValue -> {
str
}
is StringResource -> {
stringResource(id = resourceId, formatArgs = args)
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用范围示例:
在你的ViewModel位置你可以简单地提供字符串资源的id
var stringResourceVariable = UiText.StringResource(R.string.some_string_resource)
Run Code Online (Sandbox Code Playgroud)
然后在你的Composable
viewModel.stringResourceVariable.asString()
Run Code Online (Sandbox Code Playgroud)
您可以简单地调用asString,它将根据您提供的字符串类型进行解析UiText。
采用这种方法的好处是,您在ViewModel.
| 归档时间: |
|
| 查看次数: |
4253 次 |
| 最近记录: |