Oluşturulan kaynaklar

Jetpack Compose, Android projenizde tanımlanan kaynaklara erişebilir. Bu belgede, Compose'un bunun için sunduğu bazı API'ler açıklanmaktadır.

Kaynaklar, kodunuzun kullandığı ek dosyalar ve statik içeriktir (ör. bit eşlemler, düzen tanımları, kullanıcı arayüzü dizeleri, animasyon talimatları vb.). Android'deki kaynaklara aşina değilseniz Uygulama kaynaklarına genel bakış kılavuzuna göz atın.

Yaylı Çalgılar

En yaygın kaynak türü Dizelerinizdir. XML kaynaklarınızda statik olarak tanımlanmış bir dize almak için stringResource API'yi kullanın.

// In the res/values/strings.xml file
// <string name="compose">Jetpack Compose</string>

// In your Compose code
Text(
    text = stringResource(R.string.compose)
)

stringResource, konum biçimlendirmesiyle de çalışır.

// 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)
)

Dize çoğulları (deneysel)

Belirli miktarda bir çoğul yüklemek için pluralStringResource API'sini kullanın.

// 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
    )
)

pluralStringResource yöntemini kullanırken dizeniz bir sayı içeren dize biçimlendirmesi içeriyorsa sayıyı iki kez iletmeniz gerekir. Örneğin, %1$d minutes dizesi için ilk count parametresi uygun çoğul dizeyi seçer ve ikinci count parametresi %1$d yer tutucusuna eklenir. Çoğul dizeleriniz dize biçimlendirmesi içermiyorsa üçüncü parametreyi pluralStringResource öğesine iletmeniz gerekmez.

Çoğullar hakkında daha fazla bilgi için miktar dizesi belgelerine göz atın.

Boyutlar

Benzer şekilde, kaynak XML dosyasından boyutları almak için dimensionResource API'yi kullanın.

// 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)
)

Renkler

Uygulamanızda Compose'u aşamalı olarak kullanıyorsanız renkleri kaynak XML dosyasından almak için colorResource API'yi kullanın.

// In the res/colors.xml file
// <color name="purple_200">#FFBB86FC</color>

// In your Compose code
Divider(color = colorResource(R.color.purple_200))

colorResource, statik renklerle beklendiği gibi çalışır ancak renk durumu listesi kaynaklarını birleştirir.

Vektör öğeleri ve resim kaynakları

Vektör çekilebilirlerini veya PNG gibi pikselleştirilmiş öğe biçimlerini yüklemek için painterResource API'yi kullanın. Çekilebilir öğenin türünü bilmeniz gerekmez. Image composable'larında veya paint değiştiricilerinde painterResource öğesini kullanmanız yeterlidir.

// 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, ana iş parçacığındaki kaynağın içeriğini ayrıştırır ve ayrıştırır.

Animasyonlu Vektör Çekilebilir Öğeleri

Animasyonlu vektör çekilebilir bir XML yüklemek için AnimatedImageVector.animatedVectorResource API'yi kullanın. Yöntem bir AnimatedImageVector örneği döndürür. Animasyonlu resmi görüntülemek için Image ve Icon composable'larında kullanılabilecek bir Painter oluşturmak üzere rememberAnimatedVectorPainter yöntemini kullanın. rememberAnimatedVectorPainter yönteminin atEnd boole parametresi, resmin tüm animasyonların sonunda çizilip çizilmeyeceğini belirtir. Değişebilir bir durumla kullanılırsa bu değerde yapılan değişiklikler ilgili animasyonu tetikler.

// 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
)

Simgeler

Jetpack Compose, Composer'da Materyal Simgeleri kullanmak için giriş noktası olan Icons nesnesiyle birlikte sunulur. Beş farklı simge teması vardır: Dolgulu, Dış çizgili, Yuvarlak, İki Ton ve Keskin. Her tema aynı simgeleri içerir, ancak farklı bir görsel stile sahiptir. Tutarlılık için genellikle bir tema seçip uygulamanız genelinde kullanmalısınız.

Simge çizmek için tonlama uygulayan ve simgeyle eşleşen düzen boyutu sağlayan Icon composable'ı kullanabilirsiniz.

Icon(Icons.Rounded.Menu, contentDescription = "Localized description")

En sık kullanılan simgelerden bazıları androidx.compose.material bağımlılığı kapsamında mevcuttur. Diğer Material simgelerinden herhangi birini kullanmak için build.gradle dosyasına material-icons-extended bağımlılığını ekleyin.

dependencies {
  def composeBom = platform('androidx.compose:compose-bom:2024.03.00')
  implementation composeBom

  implementation 'androidx.compose.material:material-icons-extended'
}

Yazı Tipleri

Compose'da yazı tipi kullanmak için yazı tipi dosyalarını indirip res/font klasörüne yerleştirerek doğrudan APK'larınızda birleştirin.

Font API'yi kullanarak her bir yazı tipini yükleyin ve TextStyle örneklerinde kullanabileceğiniz bir FontFamily oluşturun. Typography. Aşağıda, Crane oluşturma örneğinden ve bu örneğin Typography.kt dosyasından alınan kod yer almaktadır.

// 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()
    }
}

Oluştur'da indirilebilir yazı tiplerini kullanmak için İndirilebilir yazı tipleri sayfasına bakın.

Compose'da tema oluşturma belgelerinde tipografi hakkında daha fazla bilgi edinin