
Not: Değiştiricilerin temellerini öğrenmeye devam etmeden önce jetpack oluşturmadaki değiştiricilerin temellerini bilmeniz gerekebilir. burada , burada
değiştirici Jetpack Compose’da hem bir arabirim hem de eşlik eden bir nesnedir. Gibi çeşitli yöntemler tanımlar.
fun <R> foldIn(initial: R, operation: (R, Element) -> R): R
fun <R> foldOut(initial: R, operation: (Element, R) -> R): R
Burada Element
içinde bulunan tek bir öğeyi temsil eder. Modifier
Zincir. Bu işlevi anlamamıza gerek yok, ancak değiştiricilerin dahili olarak çalıştığı ortaya çıktı. Element
türleri Element
genişleten başka bir arayüzden başka bir şey değildir. Modifier
arayüz, bu nedenle aynı zamanda yalnızca bir Değiştiricidir. Ancak bunun somut uygulamalarına ihtiyacımız var. Modifier.Element
Özel değiştiricilerimizi oluşturmak için değiştirici zincirine beslemek için arayüz.
Kısacası bir değiştirici, değiştirici öğelerin sıralı, değişmez bir koleksiyonudur (örn. Modifier.Eelement
).
Özel bir şey yaratmak için her zaman mevcut bileşenlere bakabiliriz ve açık kaynağın gerçek güzelliği olan çerçeve yazarlarının bunu nasıl yaptığını görebiliriz, ayrıca bize en iyi mühendislerin bu apileri nasıl tasarladığını öğrenme şansı verir.
hadi seçelim background()
değiştirici ve bu değiştiricinin oluşturma çerçevesinde nasıl uygulandığını görün
/**
* Draws [shape] with a solid [color] behind the content.
* @param color color to paint background with
* @param shape desired shape of the background
*/
fun Modifier.background(
color: Color,
shape: Shape = RectangleShape
) = this.then(
Background(
color = color,
shape = shape,
inspectorInfo = debugInspectorInfo {
name = "background"
value = color
properties["color"] = color
properties["shape"] = shape
}
)
)
background()
bir uzatma fonksiyonudur Modifier
. bir Modifier
örnek ve sonra onu çağırır then()
ve sonucu döndürür (birleştirilmiş bir değiştirici) then()
geçerli olanla birleştirilmesi gereken diğer değiştiriciden yalnızca bir parametre bekler; bu, değiştiricilerin kodda görünmeleri için uygulanmasının nedenidir.
Bu durumuda background()
bir örneğini döndürür Background
hangi uzanır InspectorValueInfo
ve uygular DrawModifier
arayüz InspectorValueInfo
(esas olarak hata ayıklama amacıyla kullanılır, bu yüzden buna derinlemesine girmeyeceğiz) ve sürpriz değil DrawModifier
arayüz uzanır Modifier.Element
uygulayan sınıflar anlamına gelir DrawModifier
olarak da hareket edebilir Modifier.Element
yukarıda öğrendiğimiz değiştiriciler zincirlenir, bu durumda somut uygulama Background
anlamamıza gerek yok Background
sınıf özel değiştiricileri nasıl oluşturacağınızı öğrenmek için bu sınıfa dalmayacağım, isterseniz bu makalede yapabilirsiniz.
Özel değiştirici oluşturmak için doğrudan uygulayabiliriz Modifier.Element
arayüzü veya mevcut bazı alt öğelerini bir DrawModifier
yüzeyinde bazı çizimler yapan değiştiricilerde kullanılır. birleştirilebilirler bu değiştiricinin uygulandığı yer. eski – background()
, paint()
, drawBehind{}
vb. kaynak koduna bakarsanız, tüm uygulamaları kullanır. DrawModifier
.
Aşağıdaki gibi özel değiştiriciler oluşturmak için uygulayabileceğimiz önceden tanımlanmış başka arayüzler de var: LayoutModifier
Composables’ın boyut manipülasyonunu yapan değiştiriciler tarafından kullanılan eski – scale()
, height()
, width()
, padding()
, offset()
vb tüm kullanım LayoutModifier
kaputun altında.

Bu makale zaten uzun bir kontrol uygulaması olduğundan, uygulama ayrı bir makalede ele alınmıştır.