Skip to content

# 📱✨ Adaptif UI'den Öte: Cihaz Katlanırken Uygulamanızı Dinamik Olarak Yeniden Şekillendirme Foldable (katlanabilir) ve rollable (açılabilir) ekran teknolojileri hızla yaygınlaşıyor. Samsung Galaxy...

Published by Adem Hatay on

AI ile Üretilmiştir Blog Sayısı

<img src=“https://images.unsplash.com/photo-1555949963-aa79dcee981c?w=800” alt=““📱✨ 'Adaptif UI’den Öte: Cihaz Katlanırken Uygulamanızı Dinamik Olarak Yeniden Şekillendirme (Foldable & Rollable Ekranlar için Geliştirme Stratejileri)”” style=“width: 100%; max-width: 600px; height: 300px; object-fit: cover; border-radius: 8px; margin-bottom: 2rem;” />

📱✨ Adaptif UI’den Öte: Cihaz Katlanırken Uygulamanızı Dinamik Olarak Yeniden Şekillendirme

Foldable (katlanabilir) ve rollable (açılabilir) ekran teknolojileri hızla yaygınlaşıyor. Samsung Galaxy Z serisi, Microsoft Surface Duo ve Huawei Mate X gibi cihazlar, geliştiricilere yeni kullanıcı deneyimleri tasarlama fırsatı sunuyor. Peki uygulamanızı bu cihazlarda nasıl optimize edebilirsiniz?

Foldable ve Rollable Ekranların Yükselişi

2024 verilerine göre foldable cihaz pazarı %65 büyüme gösterdi. Bu cihazların en önemli özelliği, kullanıcıların cihazı katlayıp açarken ekran boyutunun ve şeklinin dinamik olarak değişmesi. Uygulamanızın bu değişikliklere uyum sağlaması kritik önem taşıyor.

Temel Kavramlar: Postür ve Ekran Düzeni

// Jetpack WindowManager ile cihaz postürünü algılama
val windowInfoTracker = WindowInfoTracker.getOrCreate(this)
val lifecycleOwner = this

windowInfoTracker.windowLayoutInfo(lifecycleOwner)
    .collect { layoutInfo ->
        val foldingFeature = layoutInfo.displayFeatures
            .filterIsInstance<FoldingFeature>()
            .firstOrNull()
        
        when (foldingFeature?.state) {
            FoldingFeature.State.FLAT -> {
                // Tam açık durum
                updateLayoutForTabletMode()
            }
            FoldingFeature.State.HALF_OPENED -> {
                // Kitap modu
                updateLayoutForDualScreen()
            }
            FoldingFeature.State.FOLDED -> {
                // Kapalı durum
                updateLayoutForPhoneMode()
            }
            else -> {
                // Standart durum
            }
        }
    }

Dinamik Düzen Stratejileri

1. Continuation Pattern (Süreklilik Deseni)

Kullanıcı cihazı açtığında içeriklerin kesintisiz devam etmesini sağlar. Örneğin bir e-posta uygulamasında:

  • Kapalı durum: Liste görünümü
  • Açık durum: Liste + detay görünümü yan yana
<!-- res/layout/sw600dp/mail_activity.xml -->
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/listFragment"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"/>

    <fragment
        android:id="@+id/detailFragment"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="match_parent"/>
</LinearLayout>

2. Mirroring Pattern (Aynalama Deseni)

İçeriğin ekranın her iki tarafında da gösterilmesi. Özellikle sunum uygulamaları için ideal.

// FoldingFeature'den hinge (menteşe) konumunu alma
val hinge = foldingFeature?.bounds ?: Rect()

// İçeriği menteşenin her iki tarafına yerleştirme
val leftPane = calculateLeftPaneBounds(hinge)
val rightPane = calculateRightPaneBounds(hinge)

updateViewBounds(leftPane, rightPane)

React Native ile Foldable Uyumluluğu

React Native geliştiricileri için react-native-foldable-core kütüphanesi:

import { useWindowInfo } from 'react-native-foldable-core';

const MyComponent = () => {
  const windowInfo = useWindowInfo();
  
  return (
    <View style={styles.container}>
      {windowInfo.isFolded ? (
        <PhoneLayout />
      ) : windowInfo.isHalfOpened ? (
        <DualScreenLayout hinge={windowInfo.hinge} />
      ) : (
        <TabletLayout />
      )}
    </View>
  );
};

Flutter’da Dinamik Düzenler

Flutter’da MediaQuery ve LayoutBuilder ile foldable desteği:

class FoldableAwareWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    final window = View.of(context).displayFeatures;
    final hinge = window.firstWhere(
      (feature) => feature.type == DisplayFeatureType.hinge,
      orElse: () => null,
    );

    if (hinge != null) {
      return TwoPaneLayout(
        hinge: hinge.bounds,
        leftChild: LeftPane(),
        rightChild: RightPane(),
      );
    } else {
      return SinglePaneLayout();
    }
  }
}

Performans Optimizasyonları

  1. Düzen Değişikliklerinde Hafıza Yönetimi:

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        // Görünümleri yeniden oluşturmak yerine var olanları güncelle
        updateExistingViews()
    }
  2. Kaynak Tüketimi: Foldable cihazlar genellikle daha fazla RAM’e sahip olsa da, iki ekranı aynı anda yönetmek kaynak tüketimini artırır.

  3. Render Süresi: Düzen değişikliklerini 16ms altında tamamlamaya özen gösterin.

Test Stratejileri

  1. Emülatör Kullanımı: Android Studio’nun foldable emülatörleri
  2. Fiziksel Cihaz Testi: En az 2 farklı cihazda test
  3. Otomatik Test Senaryoları:
    @Test
    fun testLayoutTransition() {
        // Kapalı durum testi
        device.fold()
        onView(withId(R.id.main_layout)).check(matches(isDisplayed()))
        
        // Açık durum testi
        device.unfold()
        onView(withId(R.id.dual_layout)).check(matches(isDisplayed()))
    }

Gerçek Dünya Örnekleri

  1. Microsoft Outlook: Posta listesi ve okuma paneli arasında akıcı geçiş
  2. Samsung Notes: Not alırken bir tarafta klavye, diğer tarafta içerik
  3. Google Maps: Katlanmış durumda basit navigasyon, açık durumda detaylı harita

2024-2025 Trendleri ve Öngörüler

  1. Rollable Ekranlar: LG Rollable gibi cihazlar için yatay genişleme desteği
  2. Çoklu Hinge Desteği: İkiden fazla katlama noktası olan cihazlar
  3. Dinamik UI Framework’leri: Jetpack Compose ve SwiftUI’da yerleşik foldable desteği

Son Tavsiyeler

  1. Progressive Enhancement: Temel işlevselliği tüm cihazlarda sunun, gelişmiş özellikleri foldable’larda etkinleştirin
  2. Kullanıcı Deneyimi: Kullanıcıların cihazı nasıl tuttuğunu göz önünde bulundurun
  3. Dokümantasyon: Tüm ekran durumları için clear back navigation sağlayın
  4. Performans İzleme: Firebase Performance Monitoring ile farklı cihaz durumlarını takip edin

Foldable ve rollable cihazlar mobil deneyimi yeniden tanımlıyor. Uygulamanızı bu geleceğe hazırlamak için şimdi harekete geçin! 🚀


💡 Hızlı Özet

Bu yazıda “📱✨ 'Adaptif UI’den Öte: Cihaz Katlanırken Uygulamanızı Dinamik Olarak Yeniden Şekillendirme (Foldable & Rollable Ekranlar için Geliştirme Stratejileri)” konusunu detaylı olarak ele aldık. Öğrendiklerinizi projelerinizde uygulayarak deneyim kazanmayı unutmayın!

🎯 Bu 1. blog yazımızda öğrendikleriniz:

  • Pratik implementasyon teknikleri
  • Best practice önerileri
  • Performans optimizasyon ipuçları
  • Gerçek dünya kullanım örnekleri

📱 Beni Takip Edin: