DeviceHelper Plugin Yapımı [1- Yükseklik ve Genişlik Değerlerini Alma]

Merhaba,

Xamarin kullanarak geliştirdiğimiz mobil uygulamalarımızda her zaman ihtiyaç duyduğumuz "cihaz özelliklerine ulaşmak" kısmı için bir makale serisi başlatmaya karar verdim. Bu seride ilk önce ScreenSize gibi basit bir konuyu ele alarak başlayacağım. Daha sonra cihaz üzerinde kullanmak isteyebileceğimiz ne kadar özellik varsa bu projeye ekleyerek devam edeceğim.

Sizlerinde tahmin edeceği gibi bu gibi cihaz spesifik işlemlerin hepsi DependencyService ile gerçekleştiriliyor. Yani bu makale serimizin hemen hemen her makalesinde ayrı zorluklarda DependencyService işlemleri gerçekleştireceğiz.

Tabii ki ilk olarak projemizi açıyoruz. (PCL proje tipini tercih ettim, sizler isterseniz Shared devam edebilirsiniz.)

PCL

Projemizi açtıktan sonra yapmamız gereken en önemli durum Droid, iOS veya WinPhone projelerinden herhangi bir tanesi çalıştırıldığında Portable katmandaki ortak kodlarımdan çalışan projenin, hangi cihazda çalışıyorsa (bu iPhone4 veya HTC One olabilir.) width ve height özelliklerini almak.

Amacımız çok belli bu yüzden gidip Droid, iOS ve WinPhone katmanları için tek tek kod yazalım..

Portalble katmanından çıkmadan önce Xamarin.Forms DependencyService kullanacağımız için IDeviceHelper adında bir interface ve bu interface içerisinde geriye Width ve Height propertyleri içeren bir DeviceHelper class'ı döndürdüğünü inceleyelim.

DeviceHelperIDeviceHelper

Droid Ekran Özellikleri Nasıl Alınır?

Droid tarafta ekran özelliklerini bize veren hazır bir class mevuct. (DisplayMetrics) Bu yardımcı class'ı kullanarak zahmetsiz bir şekilde width ve height özelliklerini elde edeceğiz.

DroidDeviceHelper

Fakat mobil dünyada olduğumuz için bize pixel değil dp değeri lazım. Bunun için kodumuzda biraz refactor işlemi gerçekleştireceğiz.

DisplayMetrics.Density değişkeninden yardım alacağız. Elde ettiğimiz pixel değerini çalışan cihaz'ın density değerine bölerek dp değerini elde ediyoruz.

DroidDeviceHelperRefactoring

Droid ortam için hemen test edelim..

DependencyService için assembly register kısmını unutmuyoruz.

[assembly: Xamarin.Forms.Dependency(typeof(ScreenSizeDependency))]

DependencyService

DependencyService.Get<IDeviceHelper> ile IDeviceHelper interface'inden türetilmiş ve DependencyService olarak assembly register'ı yapılmış her class'a Xamarin.Forms üzerinden ulaşacağım.

DroidDependencyService

Gördüğümüz gibi Xamarin.Forms tarafından IDeviceHelper yardımıyla tetiklediğimiz Droid.ScreenSizeDependency class'ından dp formatında Width ve Height değerlerini aldık.

Şimdi sıra geldi iOS ve WinPhone DependencyService işlemlerine.

iOS Ekran Özellikleri Nasıl Alınır?

iOSDeviceHelper

iOS üzerindeki UIScreen class'ı bize bu konuda kolaylık sağlıyor.

Hemen iOS için test edelim.. iPhone 6 simulator'u çalıştırıyorum..

iOSDependencyService

Doğru değerleri aldığımızı iPhone development sitesi üzerinden onaylıyoruz.

WinPhone Ekran Özellikleri Nasıl Alınır?

WinPhoneDeviceHelper

WinPhone için Windows class'ı bize yardımcı oluyor.

Hemen test edelim..

WinPhoneDependencyService

Gördüğümüz gibi artık hangi ortam ve hangi cihaz olursa olsun (emulator ve simulator dahil) ekran üzerindeki gerçek width ve height değerlerini alabiliyoruz.

Makale serimize diğer cihaz özellikleri ile devam edeceğiz.

İlgili linkten projeyi indirebilirsiniz.

Görüşmek üzere.

 

Yiğit

Xamarin Developer, Consultant & Architect. Community Leader and Director of Xamarin Türkiye

Post A Reply