Jetpack Compose może uzyskiwać dostęp do zasobów zdefiniowanych w projekcie aplikacji na Androida. W tym dokumencie opisujemy niektóre interfejsy API, które Compose udostępnia w tym celu.
Zasoby to dodatkowe pliki i treści statyczne, których używa kod, takie jak mapy bitowe, definicje układu, ciągi znaków interfejsu, instrukcje animacji itp. Jeśli nie znasz zasobów w Androidzie, zapoznaj się z przewodnikiem po zasobach aplikacji.
Strings
Najczęstszym typem zasobów są ciągi znaków. Użyj interfejsu API stringResource, aby pobrać ciąg znaków zdefiniowany statycznie w zasobach XML.
// In the res/values/strings.xml file // <string name="compose">Jetpack Compose</string> // In your Compose code Text( text = stringResource(R.string.compose) )
stringResource działa też z formatowaniem pozycyjnym.
// 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) )
Liczba mnoga ciągów znaków (funkcja eksperymentalna)
Użyj interfejsu API pluralStringResource, aby wczytać liczbę mnogą z określoną ilością.
// 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 ) )
Jeśli używasz metody pluralStringResource, musisz przekazać liczbę dwukrotnie, jeśli ciąg znaków zawiera formatowanie ciągu znaków z liczbą. Na przykład w przypadku ciągu %1$d minutes pierwszy parametr liczby wybiera odpowiedni ciąg liczby mnogiej, a drugi parametr liczby jest wstawiany do obiektu zastępczego %1$d.
Jeśli ciągi znaków w liczbie mnogiej nie zawierają formatowania, nie musisz przekazywać trzeciego parametru do funkcji pluralStringResource.
Więcej informacji o liczbie mnogiej znajdziesz w dokumentacji dotyczącej ciągów znaków określających liczbę.
Wymiary
Podobnie możesz użyć interfejsu API dimensionResource, aby uzyskać wymiary z pliku XML zasobu.
// 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) )
Kolory
Jeśli stopniowo wdrażasz Compose w aplikacji, użyj interfejsu API colorResource, aby pobrać kolory z pliku XML zasobu.
// In the res/colors.xml file // <color name="purple_200">#FFBB86FC</color> // In your Compose code HorizontalDivider(color = colorResource(R.color.purple_200))
colorResource działa zgodnie z oczekiwaniami w przypadku kolorów statycznych, ale spłaszcza zasoby listy stanów kolorów.
Zasoby wektorowe i zasoby graficzne
Użyj interfejsu API painterResource, aby wczytać obiekty rysowalne wektorowo lub zasoby w formatach rastrowych, takich jak PNG. Nie musisz znać typu elementu rysowalnego – po prostu użyj painterResource w komponentach Image lub modyfikatorach paint.
// 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 dekoduje i analizuje zawartość zasobu w głównym wątku.
Animowane obiekty rysowalne wektorowo
Użyj interfejsu API AnimatedImageVector.animatedVectorResource, aby wczytać animowany obiekt rysowalny wektorowo w formacie XML. Metoda zwraca instancję AnimatedImageVector. Aby wyświetlić animowany obraz, użyj metody rememberAnimatedVectorPainter, aby utworzyć obiekt Painter, którego można używać w komponentach Image i Icon.
Wartość logiczna atEnd metody rememberAnimatedVectorPainter wskazuje, czy obraz powinien zostać narysowany na końcu wszystkich animacji.
Jeśli jest używany ze stanem zmiennym, zmiany tej wartości powodują uruchomienie odpowiedniej animacji.
// 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 )
Ikony
Jetpack Compose zawiera obiekt Icons, który jest punktem wejścia do korzystania z ikon w stylu Material Design w Compose. Dostępnych jest 5 różnych motywów ikon:
Filled,
Outlined,
Rounded,
TwoTone i
Sharp. Każdy motyw zawiera te same ikony, ale w innym stylu wizualnym. Zwykle wybiera się jeden motyw i używa go w całej aplikacji, aby zachować spójność.
Aby narysować ikonę, możesz użyć funkcji kompozycyjnej Icon, która stosuje odcień i zapewnia rozmiar układu odpowiadający ikonie.
Icon(Icons.Rounded.Menu, contentDescription = "Localized description")
Niektóre z najczęściej używanych ikon są dostępne w ramach zależności androidx.compose.material. Aby użyć innych ikon Material Design, dodaj zależność material-icons-extended do pliku build.gradle.
dependencies {
def composeBom = platform('androidx.compose:compose-bom:2026.09.00')
implementation composeBom
implementation 'androidx.compose.material:material-icons-extended'
}
Czcionki
Aby używać czcionek w Compose, pobierz i umieść pliki czcionek bezpośrednio w pakietach APK, umieszczając je w folderze res/font.
Wczytaj każdą czcionkę za pomocą interfejsu API Font i utwórz z nich obiekt FontFamily, którego możesz używać w instancjach TextStyle, aby tworzyć własne obiekty Typography. Poniżej znajduje się kod z przykładowej aplikacji Compose Crane i jej pliku 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() } }
Informacje o używaniu czcionek do pobrania w Compose znajdziesz na stronie Czcionki do pobrania.
Więcej informacji o typografii znajdziesz w dokumentacji dotyczącej motywów w Compose.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Wczytywanie obrazów {:#loading-images}
- Material Design 2 w Compose
- Niestandardowe systemy projektowania w Compose