İçerik alfa
Önem derecesini iletmek için içeriği ne kadar vurguladığınızı genellikle değiştirmek istersiniz
ve görsel bir hiyerarşi
sağlamanızı sağlar. Materyal Tasarım'daki metin okunabilirliği
öneriler için
farklı önem düzeylerini aktarmak için farklı opaklık seviyeleri kullanma.
Jetpack Compose bunu LocalContentAlpha
aracılığıyla uygular.
Bu CompositionLocal
için bir değer sağlayarak bir hiyerarşi için içerik alfasını belirtebilirsiniz.
İç içe yerleştirilmiş kompozitler, içeriklerine alfa işlemi uygulamak için bu değeri kullanabilir.
Örneğin, Text
ve Icon
varsayılan olarak LocalContentAlpha
için ayarlanmış LocalContentColor
kombinasyonunu kullanır. Malzeme, ContentAlpha
nesnesi tarafından modellenen bazı standart alfa değerlerini (high
, medium
,
disabled
) belirtir.
// By default, both Icon & Text use the combination of LocalContentColor &
// LocalContentAlpha. De-emphasize content by setting content alpha
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
Text(
// ...
)
}
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.disabled) {
Icon(
// ...
)
Text(
// ...
)
}
CompositionLocal
hakkında daha fazla bilgi için
CompositionLocal rehberi.
Şekil 4. Görsel olarak iletişim kurmak için metne farklı düzeylerde vurgu eklemek
hiyerarşik olarak düzenlenmiştir. İlk metin satırı başlıktır ve en önemli bilgileri içerir. Bu nedenle ContentAlpha.high
kullanılır. İkinci satır, daha az önemli meta veriler içerir ve bu nedenle ContentAlpha.medium
kullanılır.
Koyu tema
Oluşturma'da, MaterialTheme
bileşenine farklı Colors
grupları sağlayarak açık ve koyu temaları uygularsınız:
@Composable
fun MyTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
MaterialTheme(
colors = if (darkTheme) DarkColors else LightColors,
/*...*/
content = content
)
}
Bu örnekte MaterialTheme
, koyu temanın kullanılıp kullanılmayacağını belirten bir parametre kabul eden kendi birleştirilebilir işlevine sarılmıştır. İçinde
Bu örnekte, işlevdarkTheme
cihaz teması ayarına dikkat edin.
Mevcut Colors
'nin açık mı yoksa koyu mu olduğunu kontrol etmek için aşağıdaki gibi bir kod kullanabilirsiniz:
val isLightTheme = MaterialTheme.colors.isLight
Icon(
painterResource(
id = if (isLightTheme) {
R.drawable.ic_sun_24
} else {
R.drawable.ic_moon_24
}
),
contentDescription = "Theme"
)
Yükseltme yer paylaşımları
Material'de, koyu temalarda daha yüksek rakımlara sahip yüzeylere arka planlarını aydınlatan yükseklik yer paylaşımları uygulanır. Bir yüzeyin rakımı ne kadar yüksek olursa (bunu yakınlaştırarak)
benzer bir ışık kaynağı alırsa yüzey daha hafif hale gelir.
Bu yer paylaşımları, koyu renkler kullanıldığında Surface
bileşeni tarafından ve yüzey kullanan diğer tüm Material bileşenleri için otomatik olarak uygulanır:
Surface(
elevation = 2.dp,
color = MaterialTheme.colors.surface, // color will be adjusted for elevation
/*...*/
) { /*...*/ }
Şekil 5. Hem kartlarda hem de alttaki gezinme bölmesinde surface
rengi kullanılıyor
sahipler. Kartlar ve alt gezinme menüsü, arka planın üzerinde farklı yükseklik seviyelerinde olduğundan renkleri biraz farklıdır. Kartlar arka plandan, alt gezinme menüsü ise kartlardan daha açık renklidir.
Surface
içermeyen özel senaryolar için
LocalElevationOverlay
Şunu içeren bir CompositionLocal
:
ElevationOverlay
kullanan
Surface
bileşenler:
// Elevation overlays
// Implemented in Surface (and any components that use it)
val color = MaterialTheme.colors.surface
val elevation = 4.dp
val overlaidColor = LocalElevationOverlay.current?.apply(
color, elevation
)
Yükseklik yer paylaşımlarını devre dışı bırakmak için, birleştirilebilir bir hiyerarşide istediğiniz noktada null
sağlayın:
MyTheme {
CompositionLocalProvider(LocalElevationOverlay provides null) {
// Content without elevation overlays
}
}
Sınırlı renk vurguları
Materyal, sınırlı renk uygulanmasını öneriyor
koyu renk için aksan işaretleri
kullanarak primary
rengi yerine surface
renginin kullanılmasını tercih ederek
gerekir. TopAppBar
ve BottomNavigation
gibi materyal bileşenleri varsayılan olarak bu davranışı uygular.

6. Şekil. Sınırlı renk vurgularına sahip koyu renkli malzeme teması. Üst uygulama çubuğunda, açık temada birincil renk, koyu temada ise yüzey rengi kullanılır.
Özel senaryolar için primarySurface
özelliğini kullanın.
uzantı mülkü:
Surface(
// Switches between primary in light theme and surface in dark theme
color = MaterialTheme.colors.primarySurface,
/*...*/
) { /*...*/ }
Yazı biçimi
Material, anlamlı şekilde adlandırılmış az sayıda stil kullanmanızı teşvik ederek bir tür sistemi tanımlar.
Şekil 7. Malzeme türü sistemi.
Oluşturma, Typography
, TextStyle
ve yazı tipiyle ilgili sınıflarla yazı tipi sistemini uygular. Typography
oluşturucu, her stil için varsayılan değerler sunar. Böylece, özelleştirmek istemediğiniz stilleri atlayabilirsiniz:
val raleway = FontFamily(
Font(R.font.raleway_regular),
Font(R.font.raleway_medium, FontWeight.W500),
Font(R.font.raleway_semibold, FontWeight.SemiBold)
)
val myTypography = Typography(
h1 = TextStyle(
fontFamily = raleway,
fontWeight = FontWeight.W300,
fontSize = 96.sp
),
body1 = TextStyle(
fontFamily = raleway,
fontWeight = FontWeight.W600,
fontSize = 16.sp
)
/*...*/
)
MaterialTheme(typography = myTypography, /*...*/) {
/*...*/
}
Her yerde aynı yazı tipini kullanmak istiyorsanız defaultFontFamily parameter
öğesini belirtin ve TextStyle
öğelerinin fontFamily
özelliğini çıkarın:
val typography = Typography(defaultFontFamily = raleway)
MaterialTheme(typography = typography, /*...*/) {
/*...*/
}
Metin stillerini kullanma
TextStyle
'lere MaterialTheme.typography
üzerinden erişilir. Al
TextStyle
şöyle:
Text(
text = "Subtitle2 styled",
style = MaterialTheme.typography.subtitle2
)
Şekil 8. Markanızı ifade etmek için çeşitli yazı tipleri ve stiller kullanın.
Şekil
Materyal, büyük, orta ve küçük bileşenler için şekiller tanımlamanıza olanak tanıyan bir şekil sistemi tanımlar.
9. Şekil. Materyal şekil sistemi.
Compose, şekil sistemini
Shapes
sınıfını kullanarak
bir
CornerBasedShape
her beden kategorisi için:
val shapes = Shapes(
small = RoundedCornerShape(percent = 50),
medium = RoundedCornerShape(0f),
large = CutCornerShape(
topStart = 16.dp,
topEnd = 0.dp,
bottomEnd = 0.dp,
bottomStart = 16.dp
)
)
MaterialTheme(shapes = shapes, /*...*/) {
/*...*/
}
Birçok bileşen varsayılan olarak bu şekilleri kullanır. Örneğin,
Button
TextField
ve
FloatingActionButton
varsayılan olarak küçük,
AlertDialog
varsayılan olarak orta değerine ayarlanır ve
ModalDrawer
daha büyük olabilir; daha fazla bilgi için
şekil şeması referansı
.
Şekilleri kullanma
Shape
alanına MaterialTheme.shapes
üzerinden erişiliyor. Aşağıdaki gibi bir kod kullanarak Shape
'leri alın:
Surface(
shape = MaterialTheme.shapes.medium, /*...*/
) {
/*...*/
}
Şekil 10. Markayı veya durumu ifade etmek için şekiller kullanın.
Varsayılan stiller
Oluşturulma bölümünde eşdeğer bir kavram yok
varsayılan stiller olarak ayarlanır. Material bileşenlerini sarmalayan kendi "aşırı yükleme" birleştirilebilir işlevlerinizi oluşturarak benzer işlevler sağlayabilirsiniz. Örneğin, bir düğme stili oluşturmak için bir düğmeyi kendi birleştirilebilir işlevinize sarmalayın. Değiştirmek istediğiniz parametreleri doğrudan ayarlayın ve diğerlerini içeren birleştirilebilir öğeye parametre olarak gösterin.
@Composable
fun MyButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
content: @Composable RowScope.() -> Unit
) {
Button(
colors = ButtonDefaults.buttonColors(
backgroundColor = MaterialTheme.colors.secondary
),
onClick = onClick,
modifier = modifier,
content = content
)
}
Tema yer paylaşımları
MaterialTheme
bileşenlerini iç içe yerleştirerek, Oluştur'daki Android Görünümler'de tema yer paylaşımlarının eşdeğerini elde edebilirsiniz. MaterialTheme
, renkleri, yazı tiplerini ve şekilleri varsayılan olarak geçerli tema değerine ayarlar. Bu nedenle, bir tema bu parametrelerden yalnızca birini ayarlarsa diğer parametreler varsayılan değerlerini korur.
Ayrıca, görüntülemeye dayalı ekranları Oluştur'a taşırken android:theme
özelliğinin kullanımlarına dikkat edin. Muhtemelen yeni bir
Oluşturma kullanıcı arayüzü ağacının ilgili bölümünde MaterialTheme
.
Bu örnekte, ayrıntılar ekranında ekranın büyük kısmı için PinkTheme
, ardından ilgili bölüm için BlueTheme
kullanılır. Aşağıdaki ekran görüntüsünü ve kodu inceleyin.

Şekil 11. İç içe yerleştirilmiş temalar.
@Composable
fun DetailsScreen(/* ... */) {
PinkTheme {
// other content
RelatedSection()
}
}
@Composable
fun RelatedSection(/* ... */) {
BlueTheme {
// content
}
}
Bileşen durumları
Etkileşim kurulabilen (tıklanan, açma/kapatma düğmesi kullanılan vb.) Material bileşenleri farklı görsel durumlarda olabilir. Durumlar arasında etkin, devre dışı, basıldı vb. yer alır.
Kompozitlerde genellikle bir enabled
parametresi bulunur. Politikanın false
olarak ayarlanması,
etkileşimi ve renk ile yükseklik gibi özellikleri görsel olarak iletebilmek için değiştirir.
değiştirebilirsiniz.

Şekil 12. enabled = true
(sol) ve enabled = false
(sağ) düğmesi.
Çoğu durumda renk ve yükseklik gibi değerler için varsayılan değerleri kullanabilirsiniz.
Farklı eyaletlerde kullanılan değerleri yapılandırmak isterseniz sınıflar ve kolaylık işlevleri mevcuttur. Aşağıdaki düğme örneğini inceleyin:
Button(
onClick = { /* ... */ },
enabled = true,
// Custom colors for different states
colors = ButtonDefaults.buttonColors(
backgroundColor = MaterialTheme.colors.secondary,
disabledBackgroundColor = MaterialTheme.colors.onBackground
.copy(alpha = 0.2f)
.compositeOver(MaterialTheme.colors.background)
// Also contentColor and disabledContentColor
),
// Custom elevation for different states
elevation = ButtonDefaults.elevation(
defaultElevation = 8.dp,
disabledElevation = 2.dp,
// Also pressedElevation
)
) { /* ... */ }

Şekil 13. enabled = true
(solda) ve enabled = false
öğesini içeren düğme
(sağda), ayarlanmış renk ve yükseklik değerleriyle gösterilir.
Dalgalar
Materyal bileşenleri, etkileşim kurulduğunu belirtmek için dalgalar kullanır. Hiyerarşinizde MaterialTheme
kullanıyorsanız clickable
ve indication
gibi değiştiricilerde varsayılanIndication
olarak Ripple
kullanılır.
Çoğu durumda, varsayılan Ripple
metriğinden yararlanabilirsiniz. Proje başlatma belgesinde
nasıl yapıldığını görmek için
RippleTheme
renk ve alfa gibi özellikleri değiştirin.
RippleTheme
süresini uzatabilir ve
defaultRippleColor
ve
defaultRippleAlpha
yardımcı program işlevlerine dahildir. Ardından, LocalRippleTheme
kullanarak özel dalga temanızı hiyerarşinizde sağlayabilirsiniz:
@Composable
fun MyApp() {
MaterialTheme {
CompositionLocalProvider(
LocalRippleTheme provides SecondaryRippleTheme
) {
// App content
}
}
}
@Immutable
private object SecondaryRippleTheme : RippleTheme {
@Composable
override fun defaultColor() = RippleTheme.defaultRippleColor(
contentColor = MaterialTheme.colors.secondary,
lightTheme = MaterialTheme.colors.isLight
)
@Composable
override fun rippleAlpha() = RippleTheme.defaultRippleAlpha(
contentColor = MaterialTheme.colors.secondary,
lightTheme = MaterialTheme.colors.isLight
)
}
Şekil 14. RippleTheme
aracılığıyla sağlanan farklı dalga değerlerine sahip düğmeler.
Daha fazla bilgi
Compose'da Materyal tema oluşturma hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara göz atın.
Codelab uygulamaları
Videolar