Jos*_*uez 5 resources android kotlin android-jetpack-compose jetpack-compose-navigation
我想在顶部栏中向我的应用程序添加一个字符串资源,但是当我调用它时会出现一个数字,并且因为它是一个密封类,所以它不允许我实现stringResource或getString。
<resources>
<string name="app_name">AppEsquema</string>
<string name="app"><b>"Translator</b>"</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
sealed class Destinations(
val route: String,
val title: String,
val icon: ImageVector
){
//Bottom bar windows
object Translate: Destinations(R.string.app.toString(), "Translate", Icons.Default.Translate)
object Words: Destinations("Words", "Words", Icons.Default.Assignment)
object Numbers: Destinations("Numbers", "Numbers", Icons.Default.FormatListNumbered)
}
Run Code Online (Sandbox Code Playgroud)
我不直接输入字符串,因为顶部栏在浏览窗口时会更改名称,并且我希望它能够个性化。
这是通过窗口更改标题的代码,如果它有效,但它获取窗口路径的名称,我看到的唯一解决方案是将字符串资源分配给路径来自定义它。
您可以捕获 backStackEntry 的返回值,并用它来检查您的目的地的路由参数,when并让它返回一个显式的String
var title by remember {
mutableStateOf("")
}
LaunchedEffect(Unit){
navController.currentBackStackEntryFlow.collect {
title = it.destination.route.let { route ->
when (route) {
Destinations.Translate.route -> {
"Translate"
}
Destinations.Words.route -> {
"Words"
}
Destinations.Numbers.route -> {
"Numbers"
} else -> {
"" // empty or your default title bar
}
}
}
}
}
TopAppBar(
title = {
Text(text = title)
}
)
Run Code Online (Sandbox Code Playgroud)
Destination或者您可以向密封类添加附加参数
sealed class Destinations(
@StringRes val stringRes: Int,
val route: String,
val title: String,
val icon: ImageVector
) {
object Translate: Destinations(R.string.translate_title, ...)
object Words: Destinations(R.string.words_title, ...)
object Numbers: Destinations(R.string.numbers_title, ...)
}
Run Code Online (Sandbox Code Playgroud)
并在您的 LaunchEffect 调用中
...
val context = LocalContext.current
LaunchedEffect(Unit){
navController.currentBackStackEntryFlow.collect {
title = context.getString(it.destination.route.let { route ->
when (route) {
Destinations.Translate.route -> {
Destinations.Translate.stringRes
}
Destinations.Words.route -> {
Destinations.Words.stringRes
}
Destinations.Numbers.route -> {
Destinations.Numbers.stringRes
}
else -> {
// empty or your default/initial title
Destinations.Translate.stringRes
}
}
})
}
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
387 次 |
| 最近记录: |