TV uygulaması tasarım kurallarında, Geniş klasik kart adı verilen bir kart varyantı tanımlanır. Bu varyant, bir resmi ve açıklayıcı içerik bloğunu yan yana gösterir.
TV ekranları için karmaşık iki boyutlu düzenler oluştururken geleneksel koordinat tabanlı konumlandırmayı veya derinlemesine iç içe yerleştirilmiş Row ve Column kapsayıcılarını kullanmak kodunuzun okunmasını, bakımını ve yeniden düzenlenmesini zorlaştırabilir.
Wide klasik kart, Jetpack Compose Grid API'si için ideal bir kullanım alanıdır. Bu API, semantik ve kullanıcı tanımlı 2D düzen alanlarını kullanarak yan yana öğeleri temiz bir şekilde yapılandırmanıza yardımcı olur.
En iyi uygulamalar
Kart düzenini Grid ile uygulayın.
Grid kapsayıcısını kullanmak, fiziksel düzen boyutlarını alt öğe yerleşiminden ayırarak kodun okunabilirliğini artırır.
Tam parça dizinlerine güvenmek yerine, area işleviyle semantik adlandırılmış alanlar tanımlayın ve gridItem değiştiricisiyle alt composable'ları yerleştirin.
Karmaşık yan yana kart bileşenlerini net ve sağlam bir şekilde düzenlemek için GridTrackSize.Auto
ve minmax(0.dp, 1.fr) gibi esnek parça boyutlandırmayı, tam parça boşluklarıyla (gap(row = 8.dp, column = 16.dp)) birleştirin.
Malzemeler
Grid: Jetpack Compose'da, yapılandırma lambda'sına göre alt composable'ları satırlar ve sütunlar halinde düzenleyen 2 boyutlu bir kapsayıcı düzengridItem: BirModifieruzantısı, bir alt kullanıcı arayüzü öğesiniGriddüzeni içindeki belirli bir adlandırılmışareaIdile ilişkilendirir.area:GridConfigurationScopeiçinde,areaIdsemantiğini belirli satır ve sütun aralıklarına veya aralıklarına eşleyen bir yapılandırma DSL işleviCard: İlgili kullanıcı arayüzü öğelerini ve stilini gruplandıran bir Materyal Tasarım kapsayıcı composable'ıGridTrackSize.MinMax: Satır veya sütun boyutları için esnek sınırlar (minvemax) tanımlayan bir iz boyutlandırma özelliğiGridTrackSize.Auto: Satır veya sütun parçasını içeriğine uyacak şekilde otomatik olarak boyutlandıran bir parça boyutlandırma özelliği (column(GridTrackSize.Auto))gap: Izgara parçaları arasındaki dikey (row) ve yatay (column) aralığı belirten bir yapılandırma işlevi
Adımlar
Alan tanımlayıcılarını tanımlayın, ızgara parçalarını ve alanlarını yapılandırın, ardından alt composable'ları yerleştirin.
1. Anlamsal alan tanımlayıcılarını tanımlama
Öncelikle, Wide klasik kart düzeninizdeki bölgelerin tür açısından güvenli bir gösterimini oluşturun. enum sınıfı, dize yazım hatalarını önler ve parçaları eşlerken ve alt öğeleri yerleştirirken derleme zamanında güvenlik sağlar.
enum class CardArea { Image, Title, Subtitle, Description, ExtraText, }
2. 2D kılavuz parçalarını ve adlandırılmış alanları yapılandırma
GridComposable'ınızınconfig lambda'sında, kart yapısını oluşturan sütunları ve satırları tanımlayın. Küçük resim genişliğini düzgün bir şekilde sarması için resim sütununda GridTrackSize.Auto kullanın. İçerik sütunu için minmax(0.dp, 1.fr) kullanın. Böylece, sütun kartın kalan genişliğinde esnek bir şekilde genişler. gap(row = 8.dp, column = 16.dp) ile parça aralığını belirtin. CardArea
Tanımlayıcılarınızı area işlevini kullanarak fiziksel parça koordinatlarıyla eşleyin.
Grid( config = { // Define columns: left column for image, right for content column(GridTrackSize.Auto) column(minmax(0.dp, 1.fr)) // Define row tracks for the vertical content stack row(GridTrackSize.Auto) row(GridTrackSize.Auto) row(GridTrackSize.Auto) row(GridTrackSize.Auto) // Map semantic identifiers to grid coordinates and spans area(CardArea.Image, row = 1, column = 1, rowSpan = 4) area(CardArea.Title, row = 1, column = 2) area(CardArea.Subtitle, row = 2, column = 2) area(CardArea.Description, row = 3, column = 2) area(CardArea.ExtraText, row = 4, column = 2) gap(row = 8.dp, column = 16.dp) } ) { // Child elements placed in Step 3 }
3. gridItem değiştiricisini kullanarak alt composable'ları yerleştirme
Parçalarınız ve alanlarınız yapılandırıldıktan sonra gridItem değiştiricisini kullanarak her bir alt kullanıcı arayüzü öğesini tamamen anlamsal amaca göre yerleştirin. Alt composable'ları istediğiniz sırada bildirebilirsiniz. Grid kapsayıcısı, her öğeyi doğrudan atanmış 2D bölgesine otomatik olarak yerleştirir.
@Composable fun WideClassicCard( imageContent: @Composable () -> Unit, title: String, subtitle: String, description: String, extraText: String, modifier: Modifier = Modifier, ) { Card(modifier = modifier) { Grid( config = { // Define columns: left column for image, right for content column(GridTrackSize.Auto) column(minmax(0.dp, 1.fr)) // Define row tracks for the vertical content stack row(GridTrackSize.Auto) row(GridTrackSize.Auto) row(GridTrackSize.Auto) row(GridTrackSize.Auto) // Map semantic identifiers to grid coordinates and spans area(CardArea.Image, row = 1, column = 1, rowSpan = 4) area(CardArea.Title, row = 1, column = 2) area(CardArea.Subtitle, row = 2, column = 2) area(CardArea.Description, row = 3, column = 2) area(CardArea.ExtraText, row = 4, column = 2) gap(row = 8.dp, column = 16.dp) }, ) { Box(modifier = Modifier.gridItem(CardArea.Image)) { imageContent() } Text( text = title, style = MaterialTheme.typography.titleLarge, modifier = Modifier .gridItem(CardArea.Title) .padding(top = 16.dp, end = 16.dp), ) Text( text = subtitle, style = MaterialTheme.typography.titleMedium, modifier = Modifier .gridItem(CardArea.Subtitle) .padding(end = 16.dp), ) Text( text = description, style = MaterialTheme.typography.bodyMedium, modifier = Modifier .gridItem(CardArea.Description) .padding(end = 16.dp), ) Text( text = extraText, style = MaterialTheme.typography.labelSmall, modifier = Modifier .gridItem(CardArea.ExtraText) .padding(bottom = 16.dp, end = 16.dp), ) } } }
Sonuçlar
Wide klasik kartınızı Grid ile düzenleyip alanları adlandırarak fiziksel düzen parçaları, alan koordinatları ve alt composable yerleşimi arasında net bir ayrım yapabilirsiniz.
Bu yapı, yan yana küçük resim ve açıklama bileşenleri için TV uygulaması tasarım kurallarına uyarken düzeninizin okunabilir ve sürdürülebilir olmasını sağlar.