Lassen Sie uns Folgendes haben strings.xml
Ressourcendatei:
<resources>
<!-- basic string -->
<string name="app_name">My Playground</string>
<!-- basic string with an argument -->
<string name="greeting">Hello %!</string>
<!-- plural string -->
<plurals name="likes">
<item quantity="one">%1d like</item>
<item quantity="other">%1d likes</item>
</plurals>
<!-- string array -->
<string-array name="planets">
<item>Earth</item>
<item>Mars</item>
</string-array>
</resources>
Wie kann ich diese Ressourcen in Jetpack Compose nutzen?
Es gibt androidx.compose.ui.res Paket, das Funktionen zum Laden von String-Ressourcen sowie anderen Ressourcentypen enthält.
Zeichenfolge
Sie können eine Zeichenfolge erhalten mit stringResource()
Funktion, zum Beispiel:
...
import androidx.compose.ui.res.stringResource
@Composable
fun StringResourceExample() {
Text(
// a string without arguments
text = stringResource(R.string.app_name)
)
Text(
// a string with arguments
text = stringResource(R.string.greeting, "World")
)
}
String-Array
Kann erhalten werden mit stringArrayResource()
Funktion:
val planets = stringArrayResource(R.array.planets_array)
Plural (Mengenzeichenfolge)
Zum Zeitpunkt des Verfassens 1.0.0-alpha10
Es gibt keine integrierte Funktion zum Abrufen einer Pluralressource, aber Sie können den Android-Kontext über abrufen LocalContext und verwenden Sie es auf die gleiche Weise wie in einer ansichtsbasierten App. Noch besser, wenn Sie Ihre eigene Funktion erstellen, die anderen ähnelt Ressourcenfunktionen (wie Jetcaster Beispiel komponieren funktioniert zum Beispiel):
// PluralResources.kt
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)
}
Sie können es also genauso verwenden:
val likes = quantityStringResource(R.plurals.likes, 10, 10)
eine Anmerkung zur Neukomposition
Wie Sie wissen, kann eine zusammensetzbare Funktion in Compose bis zu hunderte Male pro Sekunde erneut ausgeführt werden Neuzusammensetzung. Wenn die von Ihnen erstellte Zeichenfolge nicht trivial ist und einige Berechnungen erfordert, ist es besser, dies zu tun erinnern das Berechnungsergebnis, sodass es nicht bei jeder Neuzusammenstellung erneut ausgeführt wird. Zum Beispiel:
...
import androidx.compose.runtime.remember
@Composable
fun BirthdayDateComposable(username: String, dateMillis: Long) {
// formatDate() function will be executed only if dateMillis value
// is changed, otherwise the remembered value will be used
val dateStr = remember(dateMillis) {
formatDate(dateMillis)
}
Text(
text = stringResource(R.string.birthday_date, dateStr)
)
}
Dies wird jetzt ab Compose unterstützt 1.2.0-alpha06
:
val likes = pluralStringResource(R.plurals.likes, 10, 10)
Hier ist ein Beispiel:
Text(text = stringResource(id = R.string.myString)