Uygulamanızda stilleri kullanmanın üç yolu vardır:
Styleparametresi sunan mevcut bileşenlerde doğrudan kullanın.Styleparametresini kabul etmeyen düzenlenebilir düzenlereModifier.styleableile stil uygulayın.- 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 kopyalanamaz. 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 | ||
| Dolgu | contentPadding (iç) ve externalPadding (dış). Tek yönlü, yatay, dikey ve dört taraflı varyantları mevcuttur. |
Hayır |
| Boyutlar | fillWidth/Height/Size() ve width, height ve size (Dp, DpSize veya Float kesirlerini destekler). |
Hayır |
| Konumlandırma | left/top/right/bottom ofsetler. |
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ının mekansal hareketi | translationX, translationY, scaleX/Y, rotationX/Y/Z |
Hayır |
| Kontrol edin | alpha, zIndex (üst üste yerleştirme sırası) ve transformOrigin (pivot noktası) |
Hayır |
| Tipografi | ||
| Stil | textStyle, fontSize, fontWeight, fontStyle ve fontFamily |
Evet |
| Renklendirme | contentColor ve contentBrush. Bu, simge stilinde de kullanılır. |
Evet |
| Paragraf | lineHeight, letterSpacing, textAlign, textDirection, lineBreak ve hyphens. |
Evet |
| Dekorasyon | textDecoration, textIndent ve baselineShift. |
Evet |
Stilleri doğrudan stil parametreleri içeren bileşenlerde kullanma
Style parametresini gösteren bileşenler, stillerini ayarlamanıza olanak tanır:
BaseButton( onClick = { }, style = { } ) { BaseText("Click me") }
Stil lambda'sında externalPadding veya background gibi çeşitli özellikleri ayarlayabilirsiniz:
BaseButton( onClick = { }, style = { background(Color.Blue) } ) { BaseText("Click me") }
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ştiriciler 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("Content") }
style parametresine benzer şekilde, lambda'ya background veya padding gibi özellikler ekleyebilirsiniz.
Row( modifier = Modifier.styleable { background(Color.Blue) } ) { BaseText("Content") }
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 oluşturup sağlamak da 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 bir composable'ın stil parametresine veya Modifier.styleable ile iletebilirsiniz. Modifier.styleable kullanırken bir 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("Column content") }
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, style) ) { BaseText("Row") }
Birden çok 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("Button") }
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 me!") }
contentPadding
geçersiz kılmaBirden 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 me!") }
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 iletilen 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 me!") }
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.
contentPadding düğmesi.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.| Öncelik | Yöntem | Efekt |
|---|---|---|
| 1 (En yüksek) | Bir composable'daki 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) aktarılır. |
Ü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("from their parents") }
Ö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("set by their parents") }
Özel stil özellikleri 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 uygulayın:
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)) }