Stillerle İlgili Temel Bilgiler

Uygulamanızda stilleri kullanmanın üç yolu vardır:

  1. Style parametresini kullanıma sunan mevcut bileşenlerde doğrudan kullanılır.
  2. Style parametresini kabul etmeyen düzenlenebilir düzenlere Modifier.styleable stilini uygulayın.
  3. Kendi özel tasarım sisteminizde Modifier.styleable{} kullanın ve kendi bileşenlerinizde bir stil parametresi gösterin.

Stillerde kullanılabilen özellikler

Stiller, değiştiricilerin desteklediği özelliklerin çoğunu destekler. Ancak değiştirici olan her şey bir stille çoğaltılamaz. Etkileşimler, özel çizim veya özelliklerin yığılması gibi belirli davranışlar için değiştiricilere ihtiyacınız vardır.

Gruplandırma Özellikler Çocuklar tarafından devralınanlar
Düzen ve boyutlandırma
İçerik dolgusu (iç) - contentPadding(all: Dp)
- contentPadding(horizontal: Dp, vertical: Dp)
- contentPadding(start: Dp, top: Dp, end: Dp, bottom: Dp)
- contentPaddingHorizontal(value: Dp) / contentPaddingVertical(value: Dp)
- contentPaddingStart(value: Dp) / contentPaddingTop(value: Dp) / contentPaddingEnd(value: Dp) / contentPaddingBottom(value: Dp)
Hayır
Harici dolgu (dış) - externalPadding(all: Dp)
- externalPadding(horizontal: Dp, vertical: Dp)
- externalPadding(start: Dp, top: Dp, end: Dp, bottom: Dp)
- externalPaddingHorizontal(value: Dp) / externalPaddingVertical(value: Dp)
- externalPaddingStart(value: Dp) / externalPaddingTop(value: Dp) / externalPaddingEnd(value: Dp) / externalPaddingBottom(value: Dp)
Hayır
Boyutlar fillWidth()/fillHeight()/fillSize() ve width, height ve size (Dp, DpSize veya Float kesirlerini destekler). Hayır
Konumlandırma left/top/right/bottom telafi edici birimler. Hayır
Görsel görünüm
Doldurur background ve foreground (Color veya Brush desteklenir). Hayır
Kenarlıklar borderWidth, borderColor ve borderBrush. Hayır
Şekil shape Hayır ancak diğer özelliklerle birlikte kullanılır. clip ve border bu tanımlanmış şekli kullanır.
Gölgeler dropShadow, innerShadow Hayır
Dönüşümler
Grafik katmanı mekansal hareketi translationX, translationY, scaleX/scaleY, rotationX/rotationY/rotationZ Hayır
Kontrol alpha, zIndex (yığın sırası) ve transformOrigin (pivot noktası) Hayır
Tipografi
Stil textStyle, fontSize, fontWeight, fontStyle ve fontFamily Evet
Renklendirme contentColor ve contentBrush. Bu özellik, simge stilini belirlemek için de kullanılır. Evet
Paragraf lineHeight, letterSpacing, textAlign, textDirection, lineBreak ve hyphens. Evet
Dekorasyon textDecoration, textIndent ve baselineShift. Evet

Stilleri, stil parametreleri içeren bileşenlerde doğrudan kullanma

Style parametresini gösteren bileşenler, stilini ayarlamanıza olanak tanır:

BaseButton(
    onClick = { },
    style = { }
) {
    BaseText("Click mnippets.kt

Stil lambda'sında externalPadding veya background gibi çeşitli özellikleri ayarlayabilirsiniz:

BaseButton(
    onClick = { },
    style = { background(Color.Blue) }
) {
    BaseText("Click mnippets.kt

Desteklenen özelliklerin tam listesi için Stiller'de kullanılabilen özellikler başlıklı makaleye bakın.

Mevcut parametresi olmayan bileşenler için değiştiricileri kullanarak stiller uygulama

Yerleşik stil parametresi olmayan bileşenlerde styleable değiştiricisini kullanarak stiller uygulayabilirsiniz. Bu yaklaşım, kendi özel bileşenlerinizi geliştirirken de faydalıdır.

Row(
    modifier = Modifier.styleable { }
) {
    BaseText("Contennippets.kt

style parametresine benzer şekilde, lambda'nın içine background, contentPadding veya externalPadding gibi özellikler ekleyebilirsiniz.

Row(
    modifier = Modifier.styleable {
        background(Color.Blue)
    }
) {
    BaseText("Contennippets.kt

Birden fazla zincirlenmiş Modifier.styleable değiştirici, uygulanan composable'daki devralınmamış özelliklerle birlikte eklenir ve aynı özellikleri tanımlayan birden fazla değiştiriciye benzer şekilde davranır. Devralınan özellikler geçersiz kılınır ve zincirdeki son styleable değiştiricisi değerleri ayarlar.

Modifier.styleable kullanırken eyalet tabanlı stil uygulamak için değiştiriciyle birlikte kullanılacak bir StyleState de oluşturup sağlamak isteyebilirsiniz. Daha fazla bilgi için Stillerle durum ve animasyonlar başlıklı makaleyi inceleyin.

Bağımsız bir stil tanımlama

Yeniden kullanılabilirlik amacıyla bağımsız bir stil tanımlayabilirsiniz:

val style = Style { background(Color.Blue) }

Daha sonra, tanımlanan stili composable'ın stil parametresine veya Modifier.styleable ile iletebilirsiniz. Modifier.styleable kullanırken StyleState nesnesi de oluşturmanız gerekir. StyleState, Stillerle durum ve animasyonlar dokümanında ayrıntılı olarak ele alınmıştır.

Aşağıdaki örnekte, bir stili doğrudan bir bileşenin yerleşik parametreleri aracılığıyla veya Modifier.styleable aracılığıyla nasıl uygulayabileceğiniz gösterilmektedir:

val style = Style { background(Color.Blue) }

// built in parameter
BaseButton(onClick = { }, style = style) {
    BaseText("Button")
}

// modifier styleable
val styleState = remember { MutableStyleState(null) }
Column(
    Modifier.styleable(styleState, style)
) {
    BaseText("Col)
}StylesSnippets.kt

Bu stili birden fazla bileşene de aktarabilirsiniz:

val style = Style { background(Color.Blue) }

// built in parameter
BaseButton(onClick = { }, style = style) {
    BaseText("Button")
}
BaseText("Different text that uses the same style parameter", style = style)

// modifier styleable
val columnStyleState = remember { MutableStyleState(null) }
Column(
    Modifier.styleable(columnStyleState, style)
) {
    BaseText("Column")
}
val rowStyleState = remember { MutableStyleState(null) }
Row(
    Modifier.styleable(rowStyleState, stText("Row")
}StylesSnippets.kt

Birden fazla stil özelliği ekleme

Her satırda farklı özellikler ayarlayarak birden fazla Stil özelliği ekleyebilirsiniz:

BaseButton(
    onClick = { },
    style = {
        background(Color.Blue)
        contentPaddingStart(16.dp)
    }
) {
    BaseText("Buttonippets.kt

Stillerdeki özellikler, değiştirici tabanlı stilin aksine eklenmez. Stiller, bir stil bloğundaki özellikler listesinde ayarlanan son değeri alır. Aşağıdaki örnekte, arka plan iki kez ayarlandığında TealColor uygulanan arka plandır. Dolgu için contentPaddingTop, contentPadding tarafından ayarlanan üst dolguyu geçersiz kılar ve değerleri birleştirmez.

BaseButton(
    style = {
        background(Color.Red)
        // Background of Red is now overridden with TealColor instead
        background(TealColor)
        // All directions of padding are set to 64.dp (top, start, end, bottom)
        contentPadding(64.dp)
        // Top padding is now set to 16.dp, all other paddings remain at 64.dp
        contentPaddingTop(16.dp)
    },
    onClick = {
        //
    }
) {
    BaseText("Click menippets.kt

İki arka plan rengi ayarlanmış ve iki contentPadding geçersiz kılma içeren düğme
Şekil 1. İki arka plan rengi ayarlanmış ve iki contentPadding geçersiz kılma
içeren düğme.

Birden fazla stil nesnesini birleştirme

Birden fazla Stil nesnesi oluşturabilir ve bunları composable'ınızın stil parametresine iletebilirsiniz.

val style1 = Style { background(TealColor) }
val style2 = Style { contentPaddingTop(16.dp) }

BaseButton(
    style = style1 then style2,
    onClick = {

    },
) {
    BaseText("Click menippets.kt

Arka plan rengi ve contentPaddingTop<0x0A>ayarı olan düğme
Şekil 2. Arka plan rengi ve contentPaddingTop ayarlanmış düğme.

Birden fazla stil aynı özelliği belirttiğinde, son ayarlanan özellik seçilir. Özellikler stillerde toplama işlemine tabi olmadığından, son dolgu, ilk contentPadding tarafından ayarlanan contentPaddingHorizontal değerini geçersiz kılar. Ayrıca, son arka plan rengi, başlangıçta iletilen stil tarafından ayarlanan arka plan rengini geçersiz kılar.

val style1 = Style {
    background(Color.Red)
    contentPadding(32.dp)
}

val style2 = Style {
    contentPaddingHorizontal(8.dp)
    background(Color.LightGray)
}

BaseButton(
    style = style1 then style2,
    onClick = {

    },
) {
    BaseText("Click menippets.kt

Bu durumda, uygulanan stilin açık gri bir arka planı ve 32.dp dolgusu vardır. Sol ve sağ dolgu ise 8.dp değerine sahiptir.

Farklı stillerle geçersiz kılınan contentPadding'e sahip düğme
Şekil 3. Farklı contentPadding Stiller tarafından geçersiz kılınan düğme.

Stil devralma

contentColor ve metin stiliyle ilgili özellikler gibi belirli stil özellikleri, alt composable'lara yayılır. Bir alt composable'da ayarlanan stil, söz konusu alt öğe için devralınan üst stili geçersiz kılar.

Style, styleable ve doğrudan parametrelerle stil yayma
Şekil 4. Style, styleable ve doğrudan parametrelerle stil yayma.
Öncelik Yöntem Efekt
1 (En yüksek) Bir composable'da doğrudan bağımsız değişkenler Her şeyi geçersiz kılar. Örneğin, Text(color = Color.Red)
2 Stil parametresi Yerel stil geçersiz kılmaları Text(style = Style { contentColor(Color.Red)}
3 Değiştirici zinciri Modifier.styleable{ contentColor(Color.Red) simgesini tıklayın.
4 (En düşük) Üst stiller Üst öğeden devralınabilen özellikler (Tipografi/Renk) için geçerlidir.

Üst öğe stili

Üst composable'dan metin özellikleri (ör. contentColor) ayarlayabilir ve bunları tüm alt Text composable'lara yayabilirsiniz.

val styleState = remember { MutableStyleState(null) }
Column(
    modifier = Modifier.styleable(styleState) {
        background(Color.LightGray)
        val blue = Color(0xFF4285F4)
        val purple = Color(0xFFA250EA)
        val colors = listOf(blue, purple)
        contentBrush(Brush.linearGradient(colors))
    },
) {
    BaseText("Children inherit", style = { width(60.dp) })
    BaseText("certain properties")
    BaseText(&quents")
}StylesSnippets.kt

Alt composable'ların özellik devralması
Şekil 5. Alt composable'ların özellik devralması.

Özelliklerin alt öğe tarafından geçersiz kılınması

Ayrıca belirli bir Text composable'da stil de ayarlayabilirsiniz. Üst composable'da stil ayarlanmışsa alt composable'da ayarlanan stil, üst composable'ın stilini geçersiz kılar.

val styleState = remember { MutableStyleState(null) }
Column(
    modifier = Modifier.styleable(styleState) {
        background(Color.LightGray)
        val blue = Color(0xFF4285F4)
        val purple = Color(0xFFA250EA)
        val colors = listOf(blue, purple)
        contentBrush(Brush.linearGradient(colors))
    },
) {
    BaseText("Children can ", style = {
        contentBrush(Brush.linearGradient(listOf(Color.Red, Color.Blue)))
    })
    BaseText("override properties")
    BaseText("ents")
}StylesSnippets.kt

Alt composable'lar üst öğe özelliklerini geçersiz kılar
Şekil 6. Alt composable'lar, üst öğe özelliklerini geçersiz kılar.

Özel stil özelliklerini uygulama

Aşağıdaki örnekte gösterildiği gibi, StyleScope üzerinde uzantı işlevlerini kullanarak mevcut Stil tanımlarıyla eşlenen özel özellikler oluşturabilirsiniz:

fun StyleScope.outlinedBackground(color: Color) {
    border(1.dp, color)
    background(color)
}

Bu yeni özelliği bir stil tanımında uygulama:

val customExtensionStyle = Style {
    outlinedBackground(Color.Blue)
}

Yeni stil verilebilir özellikler oluşturma desteklenmez. Kullanım alanınızda bu tür bir destek gerekiyorsa özellik isteği gönderin.

CompositionLocal değerlerini okuma

Tasarım sistemi jetonlarını CompositionLocal içinde depolamak, değişkenlere parametre olarak iletmeye gerek kalmadan erişmek için yaygın bir yöntemdir. Stiller, stil içinde sistem genelindeki değerleri almak için CompositionLocal'ye erişebilir:

val buttonStyle = Style {
    contentPadding(12.dp)
    shape(RoundedCornerShape(50))
    background(Brush.verticalGradient(LocalCustomColors.currentValue.background))
}