Bir composable, bir işlev tarafından tanımlanır ve @Composable
ile ek açıklamaya sahiptir:
@Composable fun SimpleComposable() { Text("Hello World") }
Bu derlemenin önizlemesini etkinleştirmek için @Composable
ve @Preview
ile ek açıklama içeren başka bir derleme oluşturun. Bu yeni, ek açıklamalı derlenebilir öğe artık başlangıçta oluşturduğunuz derlenebilir öğeyi (SimpleComposable
) içerir:
@Preview @Composable fun SimpleComposablePreview() { SimpleComposable() }
@Preview
ek açıklaması, Android Studio'ya bu derlenebilir öğenin bu dosyanın tasarım görünümünde gösterilmesi gerektiğini bildirir. Düzenlemelerinizi yaparken, derlenebilir önizlemenizde yapılan canlı güncellemeleri görebilirsiniz.
Android Studio'nun @Preview
öğesini oluşturma şeklini özelleştirmek için kodunuza manuel olarak parametreler ekleyebilirsiniz. Hatta bir bileşeni farklı özelliklerle önizlemek için @Preview
ek açıklamasını aynı işleve birden çok kez ekleyebilirsiniz.
@Preview
bileşenlerini kullanmanın başlıca avantajlarından biri, Android Studio'daki emülatöre bağımlı olmaktan kaçınmaktır. Daha fazla son görünüm ve his değişikliği yapmak için emülatörde bellek açısından ağır olan başlatma işlemini kaydedebilir ve @Preview
'ın küçük kod değişikliklerini kolayca yapıp test etme özelliğinden yararlanabilirsiniz.
@Preview
ek açıklamalarından en iyi şekilde yararlanmak için ekranlarınızı, giriş olarak aldığı durum ve oluşturduğu etkinlikler açısından tanımladığınızdan emin olun.
@Preview
tanımlayın
Android Studio, birleştirilebilir önizlemeleri genişletmek için bazı özellikler sunar. Kapsayıcı tasarımlarını değiştirebilir, bunlarla etkileşim kurabilir veya doğrudan bir emülatöre ya da cihaza dağıtabilirsiniz.
Boyutlar
Varsayılan olarak, içeriğini sarmalamak için @Preview
boyutları otomatik olarak seçilir.
Boyutları manuel olarak ayarlamak için heightDp
ve widthDp
parametrelerini ekleyin. Bu değerler zaten dp
olarak yorumlandığından bunlara .dp
eklemeniz gerekmez:
@Preview(widthDp = 50, heightDp = 50) @Composable fun SquareComposablePreview() { Box(Modifier.background(Color.Yellow)) { Text("Hello World") } }
Dinamik renk önizlemesi
Uygulamanızda dinamik rengi etkinleştirdiyseniz duvar kağıdını değiştirmek ve kullanıcı arayüzünüzün farklı kullanıcıların seçtiği duvar kağıdına nasıl tepki verdiğini görmek için wallpaper
özelliğini kullanın. Wallpaper
sınıfının sunduğu farklı duvar kağıdı temaları arasından seçim yapın. Bu özellik için Compose 1.4.0 veya üzeri sürümler gereklidir.
Farklı cihazlarla kullanma
Android Studio Flamingo'da, farklı cihazlardaki bileşenlerinizin yapılandırmalarını tanımlamak için Önizleme ek açıklamalarının device
parametresini düzenleyebilirsiniz.
Cihaz parametresinde boş bir dize (@Preview(device = "")
) varsa Ctrl
+ Space
tuşlarına basarak otomatik tamamlamayı çağırabilirsiniz. Ardından, her parametrenin değerlerini ayarlayabilirsiniz.
Otomatik tamamlama listesinden herhangi bir cihaz seçeneğini (ör. @Preview(device = "id:pixel_4")
) belirleyebilirsiniz. Alternatif olarak, her parametrenin değerlerini ayrı ayrı ayarlamak için spec:width=px,height=px,dpi=int…
'ü seçerek özel bir cihaz girebilirsiniz.
Uygulamak için Enter
tuşuna basın veya Esc
tuşuyla iptal edin.
Geçersiz bir değer ayarlarsanız beyan kırmızıyla altı çizilir ve bir düzeltme sunulabilir (Alt
+ Enter
(MacOS için ⌥ + ⏎) > Şununla değiştir:). İnceleme, girişinize en yakın düzeltmeyi sunmaya çalışır.
Yerel ayar
Farklı kullanıcı yerel ayarlarını test etmek için locale
parametresini ekleyin:
@Preview(locale = "fr-rFR") @Composable fun DifferentLocaleComposablePreview() { Text(text = stringResource(R.string.greeting)) }
Arka plan rengini ayarlama
Birleştirilebilir öğeniz varsayılan olarak şeffaf bir arka planla gösterilir. Arka plan eklemek için showBackground
ve backgroundColor
parametrelerini ekleyin. backgroundColor
değerinin Color
değeri değil, ARGB Long
olduğunu unutmayın:
@Preview(showBackground = true, backgroundColor = 0xFF00FF00) @Composable fun WithGreenBackground() { Text("Hello World") }
Sistem Arayüzü
Bir önizlemede durum ve işlem çubuklarını görüntülemeniz gerekiyorsa showSystemUi
parametresini ekleyin:
@Preview(showSystemUi = true) @Composable fun DecoratedComposablePreview() { Text("Hello World") }
Kullanıcı arayüzü modu
uiMode
parametresi, Configuration.UI_*
sabitlerinden herhangi birini alabilir ve önizlemenin davranışını buna göre değiştirmenize olanak tanır. Örneğin, temanın nasıl tepki verdiğini görmek için önizlemeyi Gece Modu'na ayarlayabilirsiniz.
LocalInspectionMode
Birleştirilebilir öğenin önizlemede (denetlenebilir bir bileşenin içinde) oluşturulup oluşturulmadığını görmek için LocalInspectionMode
CompositionLocal
değerini okuyabilirsiniz. Kompozisyon bir önizlemede oluşturulursa LocalInspectionMode.current
, true
olarak değerlendirilir. Bu bilgiler, önizlemenizi özelleştirmenize olanak tanır. Örneğin, gerçek veriler yerine önizleme penceresinde yer tutucu resim gösterebilirsiniz.
Bu sayede sınırlamaları da aşabilirsiniz. Örneğin, ağ isteği çağırmanın yerine örnek veriler gösterme.
@Composable fun GreetingScreen(name: String) { if (LocalInspectionMode.current) { // Show this text in a preview window: Text("Hello preview user!") } else { // Show this text in the app: Text("Hello $name!") } }
@Preview
cihazınızla etkileşime geçme
Android Studio, tanımladığınız önizlemelerle etkileşim kurmanıza olanak tanıyan özellikler sunar. Bu etkileşim, önizlemelerinizin çalışma zamanındaki davranışını anlamanıza yardımcı olur ve önizlemelerle kullanıcı arayüzünüzde daha iyi gezinmenize olanak tanır.
Etkileşimli mod
Etkileşimli mod, önizlemeyle telefon veya tablet gibi programınızı çalıştıran bir cihazda yaptığınız gibi etkileşim kurmanıza olanak tanır. Etkileşimli mod, öğeleri tıklayıp önizlemeye kullanıcı girişi yapabileceğiniz bir korumalı ortamda (yani diğer önizlemelerden izole edilmiş) bulunur. Bu, kompozisyonunuzun farklı durumlarını, hareketlerini ve hatta animasyonlarını hızlı bir şekilde test etmenin bir yoludur.
Kodda gezinme ve birleştirilebilir ana hatlar
İçerdiği bileşenlerin ana hatlarını görmek için imleci bir önizlemenin üzerine getirebilirsiniz. Bir derlenebilir ana hattı tıkladığınızda düzenleyici görünümünüz, ana hattı tanımına yönlendirilir.
Önizlemeyi çalıştırma
Belirli bir @Preview
'yi bir emülatörde veya fiziksel cihazda çalıştırabilirsiniz. Önizleme, yeni bir Activity
olarak aynı proje uygulamasında dağıtılır. Bu nedenle, aynı bağlamı ve izinleri paylaşır. İzin zaten verilmişse izin isteyen standart kod yazmanıza gerek yoktur.
@Preview
ek açıklamanın yanındaki veya önizlemenin üst kısmındaki Önizlemeyi Çalıştır simgesini tıkladığınızda Android Studio, @Preview
'ı bağlı cihazınıza veya emülatörünüze dağıtır.
@Preview
oluşturma işlemini kopyalama
Oluşturulan her önizleme, sağ tıklanarak resim olarak kopyalanabilir.
Aynı @Preview
ek açıklamanın birden fazla önizlemesi
Aynı @Preview
bileşeninin farklı özellikleri veya bileşene iletilen farklı parametrelerle birden fazla sürümünü gösterebilirsiniz. Böylece, aksi takdirde yazmanız gereken standart kodu azaltabilirsiniz.
Çoklu önizleme şablonları
androidx.compose.ui:ui-tooling-preview
1.6.0-alpha01 ve sonraki sürümlerde, @PreviewScreenSizes
, @PreviewFontScales
, @PreviewLightDark
ve @PreviewDynamicColors
olmak üzere çoklu önizleme API şablonları kullanıma sunulmuştur. Böylece tek bir ek açıklamayla, Oluştur kullanıcı arayüzünüzü yaygın senaryolarda önizleyebilirsiniz.
Özel çoklu önizleme ek açıklamaları oluşturma
Çoklu önizleme özelliğiyle, farklı yapılandırmalara sahip birden fazla @Preview
ek açıklama içeren bir ek açıklama sınıfı tanımlayabilirsiniz. Bu ek açıklamayı bir derlenebilir işleve eklediğinizde, farklı önizlemelerin tümü otomatik olarak bir kerede oluşturulur. Örneğin, bu notu kullanarak her bir kompozisyon için bu tanımları tekrarlamadan birden fazla cihazı, yazı tipi boyutunu veya temayı aynı anda önizleyebilirsiniz.
Kendi özel ek açıklama sınıfınızı oluşturarak başlayın:
@Preview( name = "small font", group = "font scales", fontScale = 0.5f ) @Preview( name = "large font", group = "font scales", fontScale = 1.5f ) annotation class FontScalePreviews
Önizleme kompozisyonlarınız için bu özel ek açıklamayı kullanabilirsiniz:
@FontScalePreviews @Composable fun HelloWorldPreview() { Text("Hello World") }
Daha kapsamlı bir önizleme grubu oluşturmak için birden fazla çoklu önizleme notunu ve normal önizleme notunu birleştirebilirsiniz. Çoklu önizleme ek açıklamalarının birleştirilmesi, tüm farklı kombinasyonların gösterildiği anlamına gelmez. Bunun yerine, her çoklu önizleme ek açıklama bağımsız olarak çalışır ve yalnızca kendi varyantlarını oluşturur.
@Preview( name = "Spanish", group = "locale", locale = "es" ) @FontScalePreviews annotation class CombinedPreviews @CombinedPreviews @Composable fun HelloWorldPreview2() { MaterialTheme { Surface { Text(stringResource(R.string.hello_world)) } } }
Çoklu önizlemenin ve normal önizlemenin bir arada kullanılabilmesi, daha büyük ölçekli projelerin birçok özelliğini daha kapsamlı bir şekilde test etmenizi sağlar.
@Preview
ve büyük veri kümeleri
Genellikle, birleştirilebilir önizlemenize büyük bir veri kümesi iletmeniz gerekir. Bunu yapmak için @PreviewParameter
ek açıklamalı bir parametre ekleyerek örnek verileri bir Kompozit Önizleme işlevine iletin.
@Preview @Composable fun UserProfilePreview( @PreviewParameter(UserPreviewParameterProvider::class) user: User ) { UserProfile(user) }
Örnek verileri sağlamak için PreviewParameterProvider
uygulayan ve örnek verileri dizi olarak döndüren bir sınıf oluşturun.
class UserPreviewParameterProvider : PreviewParameterProvider<User> { override val values = sequenceOf( User("Elise"), User("Frank"), User("Julia") ) }
Bu işlem, dizindeki her veri öğesi için bir önizleme oluşturur:
Birden fazla önizleme için aynı sağlayıcı sınıfını kullanabilirsiniz. Gerekirse limit parametresini ayarlayarak önizleme sayısını sınırlayın.
@Preview @Composable fun UserProfilePreview2( @PreviewParameter(UserPreviewParameterProvider::class, limit = 2) user: User ) { UserProfile(user) }
Sınırlılıklar ve en iyi uygulamalar
Android Studio, önizleme kodunu doğrudan önizleme alanında yürütür. Android çerçevesinin Layoutlib
adlı taşınmış bir kısmından yararlandığı için emülatör veya fiziksel cihaz çalıştırmayı gerektirmez. Layoutlib
, Android cihazların dışında çalışacak şekilde tasarlanmış Android çerçevesinin özel bir sürümüdür. Kitaplığın amacı, Android Studio'da bir düzenin cihazlarda oluşturulan görüntüye çok yakın bir önizlemesini sağlamaktır.
Önizleme sınırlamaları
Android Studio'da önizlemelerin oluşturulma şekli nedeniyle, önizlemeler hafiftir ve oluşturulmaları için Android çerçevesinin tamamı gerekmez. Ancak bu işlem aşağıdaki sınırlamalara tabidir:
- Ağ erişimi yok
- Dosya erişimi yok
- Bazı
Context
API'leri tam olarak kullanılamayabilir
Önizlemeler ve ViewModels
ViewModel
, bir bileşim içinde kullanıldığında önizlemeler sınırlıdır. Önizleme sistemi, ViewModel
'e iletilen tüm parametreleri (ör. depolar, kullanım alanları, yöneticiler veya benzerleri) oluşturamaz. Ayrıca, ViewModel
'ünüz bağımlılık ekleme işlemine katılıyorsa (ör. Hilt ile) önizleme sistemi, ViewModel
'ü oluşturmak için bağımlılık grafiğinin tamamını oluşturamaz.
ViewModel
ile bir bileşeni önizlemeye çalıştığınızda Android Studio, söz konusu bileşeni oluştururken hata gösterir:
ViewModel
kullanan bir derlenebilir öğeyi önizlemek istiyorsanız derlenebilir öğenin bağımsız değişkenleri olarak ViewModel
'teki parametrelerin aktarıldığı başka bir derlenebilir öğe oluşturmanız gerekir. Bu sayede, ViewModel
kullanan derlenebilir öğeyi önizlemeniz gerekmez.
@Composable
fun AuthorColumn(viewModel: AuthorViewModel = viewModel()) {
AuthorColumn(
name = viewModel.authorName,
// ViewModel sends the network requests and makes posts available as a state
posts = viewModel.posts
)
}
@Preview
@Composable
fun AuthorScreenPreview(
// You can use some sample data to preview your composable without the need to construct the ViewModel
name: String = sampleAuthor.name,
posts: List<Post> = samplePosts[sampleAuthor]
) {
AuthorColumn(...) {
name = NameLabel(name),
posts = PostsList(posts)
}
}
@Preview
ek açıklama sınıfı
Önizlemenizi özelleştirirken ayarlanabilen parametrelerin tam listesini görmek için Android Studio'da dilediğiniz zaman @Preview
ek açıklamasını "ctrl veya ⌘ + tıklayabilirsiniz".
annotation class Preview( val name: String = "", val group: String = "", @IntRange(from = 1) val apiLevel: Int = -1, val widthDp: Int = -1, val heightDp: Int = -1, val locale: String = "", @FloatRange(from = 0.01) val fontScale: Float = 1f, val showSystemUi: Boolean = false, val showBackground: Boolean = false, val backgroundColor: Long = 0, @UiMode val uiMode: Int = 0, @Device val device: String = Devices.DEFAULT, @Wallpaper val wallpaper: Int = Wallpapers.NONE, )
Ek kaynaklar
Android Studio'nun @Preview
kullanım kolaylığını nasıl desteklediği hakkında daha fazla bilgi edinmek ve daha fazla araç ipucu öğrenmek için Compose Tooling bloguna göz atın.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- CompositionLocal ile yerel kapsamlı veriler
- Oluşturma bölümündeki Material Design 2
- Oluşturma bölümünde görünümleri kullanma