Mobil Programlama

Android

DERS PROGRAMI
Android 301 Ders Programı

Farklı Ekran Boyutlarını Desteklemek

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Android, cihaz ekranlarını 2 temel özelliğe göre sınıflandırıyor: ekran boyutu ve ekran yoğunluğu (density). Farklı boyut ve yoğunlukta ekranı olan cihazlara kurulacak uygulamanızdan da bu değişkenliğe uymasını sağlamalısınız. Bu amaçla, farklı ekran boyutu ve yoğunlukları olan cihazlarda, uygulamanızın görünümünü optimize edecek bazı "alternatif kaynakları" (alternative resources) uygulamanıza dahil etmelisiniz.

  • 4 boyut sınıflandırması vardır: small, normal, large, xlarge
  • 8 ekran yoğunluğu sınıflandırması vardır. low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi), extra extra high (xxhdpi), extra extra extra high (xxxhdpi), nodpi, tvdpi.

Farklı ekranlarda kullanmak istediğiniz layout'ları ve bitmap'leri "alternatif kaynaklar" olarak beyan etmek istediğinizde onları mutlaka ayrı dizinler içinde (tıpkı farklı dil string'lerinde yaptığınız gibi) tutmalısınız.

Ekran oryantasyonunu (yatay-landspace ya da dikey-portrait) göz önünde bulundurmak, ekran boyutu çeşitliliğini dikkate almayı gerektirir ki bu sebeple uygulamalar, her oryantasyondaki kullanıcı deneyimini optimize etmek için layout'larını gözden geçirmelidir.

 

Farklı Layout'lar Oluşturmak

Farklı cihaz boyutları üzerinde kullanıcı deneyimini optimize etmek için desteklemek istediğiniz her ekran boyutuna özel XML dosyasını oluşturmanız gerekir. Her layout dosyası, kendisine tahsis edilen bir klasörde kaydedilmeli ve klasör ismi -<screen-size> son eki içermelidir. Örneğin geniş (large) ekranlarda layout dizini res/layout-large/ saklanmalıdır. 

NOT: Android, layout dosyalarınızı otomatik olarak ekrana sığacak şekilde ölçeklendirir. Bu nedenle arayüz elementleri (düğme, metin kutusu vs.) gibi sabit boyutlu elemanların farklı ekran boyutlarındaki durumuna mesai harcamak yerine, kullanıcı deneyimini etkileyen layout yapısı (örneğin içindeki view'lar yerine önemli view'ların (RelativeLayout gibi) konumu ve boyutu gibi) üzerine düşünmeyi deneyebilirsiniz.

Aşağıdaki projede varsayılan bir layout kaynağı ve geniş (large) ekranlar için alternatif bir layout kaynağının yapısını görüyorsunuz:

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
}

Sistem, uygulamanızın çalıştığı cihazın ekran boyutuna göre isimlendirilmiş uygun layout dizininden layout dosyasını alır ve ekranda gösterir. Android'in buradaki "ekran boyutuna göre" yaptığı seçimi hakkında daha fazla bilgi almak için Kaynakları Sağlamak (Providing Resources) rehberini okuyabilirsiniz.

Bir başka örnek: Yatay (landspace) oryanstasyona göre alternatif kaynak sağlayan bir projenin yapısı:

MyProject/
    res/
        layout/
            activity_main.xml
        layout-land/
            activity_main.xml

Varsayılan olarak dikey oryantasyonda layout/activity_main.xml dosyası kullanılır.

Eğer uygulamanızda yatay oryantasyonlar için -geniş ekranları da desteklemek koşuluyla- özel bir layout sağlamak istiyorsanız large ve land eleyicilerinin ikisini birden kullanmanız gerekir:

MyProject/
    res/
        layout/              # varsayılan (dikey oryantasyon)
            activity_main.xml
        layout-land/         # yatay oryantasyon
            activity_main.xml
        layout-large/        # büyük ekran (dikey oryantasyon)
            activity_main.xml
        layout-large-land/   # büyük ekran (yatay oryantasyon)
            activity_main.xml
NOT: Android 3.2 ve üstündeki sürümler, ekran boyutlarını tanımlamaya yarayan ileri seviye yöntemler sağlar. Bu sayede yoğunluk-bağımsız (density-independent) piksel (dpi) cinsinden ifade edilen minimum genişlik ve yükseklik değerleriyle, ekran boyutu temelinde alternatif kaynaklar tanımlayabilirsiniz. Bu eğitim içeriği bu konuda değinmeyecektir. Daha fazlasını öğrenmek isterseniz Birden Fazla Ekran için Tasarlamak (Designing for Multiple Screens) belgesine bakabilirsiniz.
 

Farklı Bitmap'ler Oluşturmak

Her zaman, şu ekran yoğunluklarına özel olarak oranlanmış bitmap kaynaklarını sağlıyor olmalısınız: düşük (low), orta (medium), yüksek (high) ve ekstra-yüksek (extra-high) yoğunluk. Böyle yaparak tüm ekran yoğunluklarında iyi bir grafik kalitesine ve performansa ulaşabilirsiniz.

Bu gibi görselleri oluşturabilmek için vektör biçiminde bir ham (raw) kaynak ile başlamalı ve şuradaki boyut oranlarını kullanarak her yoğunluk için görselleri oluşturmalısınız:

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (taban burası)
  • ldpi: 0.75

Bunun anlamı eğer xhdpi cihazlar için 200'e 200 bir görsel oluşturacaksanız, mdpi için 150x150, ldpi için 75x75'lik boyutlarında hazırlamalısınız.

Ardından bu dosyaları uygun drawable resource dosyaları altına kaydetmelisiniz: 

MyProject/
    res/
        drawable-xhdpi/
            profil.png
        drawable-hdpi/
            profil.png
        drawable-mdpi/
            profil.png
        drawable-ldpi/
            profil.png

 

Uygulamanızda istediğiniz yerde @drawable/profil referansını kullanabilirsiniz. Buna göre sistem uygun yoğunluk oranına göre ilgili bitmap dosyasını seçecektir.

NOT: Düşük çözünürlüklü (ldpi) kaynaklar her zaman gerekli değildir. hdpi bir görsel/kaynak sağladığınızda sistem, ldpi ekranlara uyacak şekilde oranlayacaktır.

 

Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır.

Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Supporting Different Screens