提问人:Mister Propre 提问时间:10/1/2023 更新时间:10/1/2023 访问量:55
在 Jetpack Compose 中使用对象时,如何从 xml 文件中获取字符串?
How to get a String from an xml file when using an object in Jetpack Compose?
问:
与其直接写“红色”、“黄色”和“绿色”,我想从 xml 中获取字符串。
object Apples {
val apples = listOf("red", "yellow", "green"
)
}
我试过了,但它不起作用。val context = LocalContext.current
答:
1赞
Hezy Ziv
10/1/2023
#1
在 res/values/strings 中定义字符串.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="apple_red">red</string>
<string name="apple_yellow">yellow</string>
<string name="apple_green">green</string>
</resources>
然后。
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import com.example.yourapp.R
object Apples {
@Composable
fun getAppleColors(): List<String> {
return listOf(
stringResource(R.string.apple_red),
stringResource(R.string.apple_yellow),
stringResource(R.string.apple_green)
)
}
}
@Composable
fun AppleList() {
val apples = Apples.getAppleColors()
// Use 'apples' list in your Composable, it now contains the strings from XML.
}
评论
0赞
Mister Propre
10/1/2023
多谢。然后我会用这种方式来解决我的问题。
2赞
Primož Ivančič
10/1/2023
#2
无法访问 中的上下文。
我建议你不要直接写颜色,而是使用这样的东西:object
object Apples {
val apples = listOf<Int>(
R.string.red,
R.string.yellow,
R.string.green,
)
}
这样,当您需要输出任何值时,只需调用 .stringResource(apples[0])
话虽如此,我可能会(取决于用例)通过使用以下方法解决这个问题:enum
enum class Apples(val nameResId: Int) {
Red(R.string.red),
Yellow(R.string.yellow),
Green(R.string.green)
}
字符串的实际表示不应烘焙到对象本身中,而应由 UI 处理。虽然您可以在 中创建一个函数,但您将创建另一个可组合函数,但您将无法在可组合函数外部使用。@Composable
object
评论
0赞
Mister Propre
10/1/2023
感谢您的信息。我想你的建议也会帮助我解决我的问题
评论