Jetpack Compose kann auf die in Ihrem Android-Projekt definierten Ressourcen zugreifen. In diesem Dokument werden einige der APIs beschrieben, die Compose dafür bietet.
Ressourcen sind die zusätzlichen Dateien und statischen Inhalte, die von Ihrem Code verwendet werden, z. B. Bitmaps, Layoutdefinitionen, Strings für die Benutzeroberfläche und Animationsanweisungen. Wenn Sie mit Ressourcen in Android nicht vertraut sind, lesen Sie den Leitfaden zu App-Ressourcen.
Strings
Die häufigste Art von Ressourcen sind Ihre Strings. Verwenden Sie die stringResource
API, um einen String abzurufen, der statisch in Ihren XML-Ressourcen definiert ist.
// In the res/values/strings.xml file // <string name="compose">Jetpack Compose</string> // In your Compose code Text( text = stringResource(R.string.compose) )
stringResource
funktioniert auch mit der Positionsformatierung.
// In the res/values/strings.xml file // <string name="congratulate">Happy %1$s %2$d</string> // In your Compose code Text( text = stringResource(R.string.congratulate, "New Year", 2021) )
String-Plurale (experimentell)
Verwenden Sie die pluralStringResource
API, um ein Plural mit einer bestimmten Menge zu laden.
// In the res/strings.xml file // <plurals name="runtime_format"> // <item quantity="one">%1$d minute</item> // <item quantity="other">%1$d minutes</item> // </plurals> // In your Compose code Text( text = pluralStringResource( R.plurals.runtime_format, quantity, quantity ) )
Wenn Sie die Methode pluralStringResource
verwenden, müssen Sie die Anzahl zweimal übergeben, wenn Ihr String eine Stringformatierung mit einer Zahl enthält. Für den String %1$d minutes
wird mit dem ersten Parameter „count“ der entsprechende Pluralstring ausgewählt und mit dem zweiten Parameter „count“ der Wert in den Platzhalter %1$d
eingefügt.
Wenn Ihre Pluralstrings keine Stringformatierung enthalten, müssen Sie den dritten Parameter nicht an pluralStringResource
übergeben.
Weitere Informationen zu Pluralformen finden Sie in der Dokumentation zu Mengenstrings.
Abmessungen
Verwenden Sie die dimensionResource
API, um Dimensionen aus einer XML-Datei für Ressourcen abzurufen.
// In the res/values/dimens.xml file // <dimen name="padding_small">8dp</dimen> // In your Compose code val smallPadding = dimensionResource(R.dimen.padding_small) Text( text = "...", modifier = Modifier.padding(smallPadding) )
Farben
Wenn Sie Compose inkrementell in Ihrer App einführen, verwenden Sie die colorResource
-API, um Farben aus einer XML-Ressourcendatei abzurufen.
// In the res/colors.xml file // <color name="purple_200">#FFBB86FC</color> // In your Compose code Divider(color = colorResource(R.color.purple_200))
colorResource
funktioniert wie erwartet mit statischen Farben, aber es werden Ressourcen für Farbzusammenfassungslisten zusammengefasst.
Vektor-Assets und Bildressourcen
Mit der painterResource
API können Sie entweder Vektordrawables oder gerasterte Asset-Formate wie PNGs laden. Sie müssen den Typ des Drawables nicht kennen. Verwenden Sie einfach painterResource
in Image
-Composables oder paint
-Modifizierern.
// Files in res/drawable folders. For example: // - res/drawable-nodpi/ic_logo.xml // - res/drawable-xxhdpi/ic_logo.png // In your Compose code Icon( painter = painterResource(id = R.drawable.ic_logo), contentDescription = null // decorative element )
painterResource
decodiert und parst den Inhalt der Ressource im Hauptthread.
Animierte Vektor-Drawables
Verwenden Sie die AnimatedImageVector.animatedVectorResource
API, um eine animierte XML-Datei für Vektordrawables zu laden. Die Methode gibt eine AnimatedImageVector
-Instanz zurück. Um das animierte Bild anzuzeigen, verwenden Sie die Methode rememberAnimatedVectorPainter
, um ein Painter
zu erstellen, das in den Composables Image
und Icon
verwendet werden kann.
Der boolesche Parameter atEnd
der Methode rememberAnimatedVectorPainter
gibt an, ob das Bild am Ende aller Animationen gezeichnet werden soll.
Bei Verwendung mit einem veränderlichen Status lösen Änderungen an diesem Wert die entsprechende Animation aus.
// Files in res/drawable folders. For example: // - res/drawable/ic_hourglass_animated.xml // In your Compose code val image = AnimatedImageVector.animatedVectorResource(R.drawable.ic_hourglass_animated) val atEnd by remember { mutableStateOf(false) } Icon( painter = rememberAnimatedVectorPainter(image, atEnd), contentDescription = null // decorative element )
Symbole
Jetpack Compose enthält das Icons
-Objekt, das der Einstiegspunkt für die Verwendung von Material Icons in Compose ist. Es gibt fünf verschiedene Symbolthemen:
Gefüllt,
Umriss,
Abgerundet,
TwoTone und
Scharf. Jedes Design enthält dieselben Symbole, aber in einem anderen visuellen Stil. Normalerweise sollten Sie ein Design auswählen und es in Ihrer gesamten Anwendung verwenden, um für Einheitlichkeit zu sorgen.
Um ein Symbol zu zeichnen, können Sie die Composable Icon
verwenden, die eine Tönung anwendet und eine Layoutgröße bereitstellt, die dem Symbol entspricht.
Icon(Icons.Rounded.Menu, contentDescription = "Localized description")
Einige der am häufigsten verwendeten Symbole sind als Teil der androidx.compose.material
-Abhängigkeit verfügbar. Wenn Sie andere Material-Symbole verwenden möchten, fügen Sie die material-icons-extended
-Abhängigkeit der build.gradle
-Datei hinzu.
dependencies {
def composeBom = platform('androidx.compose:compose-bom:2025.05.00')
implementation composeBom
implementation 'androidx.compose.material:material-icons-extended'
}
Schriftarten
Wenn Sie Schriftarten in Compose verwenden möchten, laden Sie die Schriftartdateien herunter und bündeln Sie sie direkt in Ihren APKs, indem Sie sie im Ordner res/font
ablegen.
Laden Sie jede Schriftart mit der Font
API und erstellen Sie damit eine FontFamily
, die Sie in TextStyle
-Instanzen verwenden können, um eigene Typography
zu erstellen. Der folgende Code stammt aus dem Crane-Compose-Beispiel und der zugehörigen Datei Typography.kt
.
// Define and load the fonts of the app private val light = Font(R.font.raleway_light, FontWeight.W300) private val regular = Font(R.font.raleway_regular, FontWeight.W400) private val medium = Font(R.font.raleway_medium, FontWeight.W500) private val semibold = Font(R.font.raleway_semibold, FontWeight.W600) // Create a font family to use in TextStyles private val craneFontFamily = FontFamily(light, regular, medium, semibold) // Use the font family to define a custom typography val craneTypography = Typography( titleLarge = TextStyle( fontFamily = craneFontFamily ) /* ... */ ) // Pass the typography to a MaterialTheme that will create a theme using // that typography in the part of the UI hierarchy where this theme is used @Composable fun CraneTheme(content: @Composable () -> Unit) { MaterialTheme(typography = craneTypography) { content() } }
Informationen zur Verwendung herunterladbarer Schriftarten in Compose finden Sie auf der Seite Herunterladbare Schriftarten.
Weitere Informationen zur Typografie finden Sie in der Dokumentation zum Theming in Compose.
Empfehlungen für dich
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Bilder werden geladen {:#loading-images}
- Material Design 2 in Compose
- Benutzerdefinierte Designsysteme in Compose