Xamarin.Forms Event Handler ile Sayfa Boyutu – Bölüm 21

Xamarin

Çeşitli görsel öğelerle ilişkili boyutlarda bazı referanslar gördünüz:

  • IOS durum çubuğunun yüksekliği 20’dir ve bunu sayfada dolgu ayarı ile ayarlayabilirsiniz.
  • BoxView varsayılan genişliğini ve yüksekliğini 40 olarak ayarlar.
  • Bir Frame içindeki varsayılan Padding sayısı 20’dir.
  • StackLayout’daki varsayılan Spacing özelliği 6’dır.

Ve sonra Device.GetNamedSize var, NamedSize;  Label veya Button için FontSize değerlerine uygun, platforma bağlı bir sayı döndürür.

Genel olarak, Xamarin.Forms uygulaması programlarken, görsel nesnelerin gerçek sayısal boyutlarına çok yaklaşmamak iyi olur. En iyi varsayılan seçenekleri oluşturmak için Xamarin.Forms’a ve bağımsız platformlara güvenmeniz tercih edilir.

Bununla birlikte, bir programcının, belirli görsel nesnelerin boyutu ve ekranın boyutu hakkında bir şeyler bilmek zorunda olduğu zamanlar vardır.

 

VisualElement, görsel öğenin Width veya Height özelliği değiştiğinde SizeChanged adlı bir olayı (event) tanımlar. Bu event, bir sayfa yerleştirildiğinde ortaya çıkan çeşitli bildirimlerin bir parçasıdır; sayfanın çeşitli öğelerinin boyutlandırılması ve konumlandırılmasını içeren bir işlem, hemen birkaç bölüm ileride göreceğiz bunu. Bu sayfa layout’ı işlemi, bir sayfanın ilk tanımını takiben (genellikle sayfa constructor’ında) gerçekleşir ve yerleşimi etkileyebilecek herhangi bir değişikliğe yanıt olarak yeni bir layout geçişi gerçekleşir.

Ekran boyutu değiştiğinde yeni bir layout da tetiklenir. Bu, çoğunlukla telefon dikey ve yatay modlar arasında döndüğünde olur.

Genişlik ve Yükseklik özelliklerinin ne zaman değiştiğini bilmek yalnızca görsel nesnelerle çalışmak için yararlıdır. Sayfanın kendisi de dahil olmak üzere sayfadaki herhangi bir görsel nesneye bir SizeChanged handler bağlayabilirsiniz. Birazdan yapacağımız  BoyutuNe programı, sayfanın boyutunu elde etme ve görüntüleme metodunu gösterir:

 

 

Bölümlerimizde olay işleme (event handling) ilk örnektir ve eventlerin normal C# ve .NET yöntemiyle işlendiğini görebilirsiniz. Constructor sonundaki kod, sayfanın SizeChanged olayına OnPageSizeChanged olay işleyicisini ekler. Olay işleyicisine (event handler’a) (genellikle sender (gönderen) olarak adlandırılır) verilen ilk argüman olayı tetikleyen nesne, bu durumda BoyutuNePage örneğidir, ancak bizim programımızda olay işleyicisi bunu kullanmaz. Ayrıca olay işleyicisi, event hakkında daha fazla bilgi sağlayan ikinci argümanı (event argümanları olarak da bilinir) kullanmaz.

Bunun yerine, olay işleyicisi, sayfanın Genişlik ve Yükseklik özelliklerini görüntülemek için Label öğesine (uygun şekilde bir alan olarak kaydedilir) erişir. String.Format çağrısında Unicode karakteri çarpı (×) simgedir.

SizeChanged eventi, öğenin boyutunu edinmek için tek fırsat değildir. VisualElement ayrıca, görsel öğeye bir boyut atandığını belirten OnSizeAllocated adlı protected bir sanal (virtual) metodu tanımlar. SizeChanged olayını handling (işlemek) yerine ContentPage de bu metodu override edebilirsiniz, ancak “size” aslında değişmediğinde OnSizeAllocated da çağrılır.

İşte üç standart platformda çalışan program:

Kayıt için bu üç resimdeki ekranların kaynakları şunlar:

  • 750 x 1334 piksel boyutlarına sahip iPhone 6 simülatörü.
  • Ekran boyutu 1080 × 1920 piksel olan bir LG Nexus 5.
  • Ekran boyutu 768 × 1280 piksele sahip bir Nokia Lumia 925.

Android’de program tarafından algılanılan dikey boyutun, durum çubuğunun veya alt düğmelerin bulunduğu alanı içermediğine dikkat edin; Windows 10 Mobile aygıtındaki dikey boyut, durum çubuğunun kapladığı alanı içermez.

Varsayılan olarak, üç platform da aygıt yönü değişikliklerine yanıt verir. Telefonları (veya emülatörleri) saat yönünün tersine 90 derece çevirirseniz, telefonlar aşağıdaki boyutları görüntüler:

İşte 2048 × 1536 piksel boyutlu iPad Air 2 simülatöründe çalışan program.

BoyutuNe programının kendisiyle ilgili birkaç not:

BoyutuNe, constructor’ın da tek bir Label oluşturur ve event handler’da Text özelliğini ayarlar. Böyle bir programı yazmanın tek yolu bu değil. Program, yeni bir metinle yepyeni bir Label oluşturmak ve sayfanın contenti olarak yeni Labeli ayarlamak için SizeChanged eventini kullanabilir; bu durumda, önceki Label unreferenced olur ve dolayısıyla garbage collection için uygun olur. Ancak, bu programda yeni görsel öğeler oluşturmak gereksizdir. Programın yalnızca bir Label görüntüsü oluşturması ve sayfanın yeni boyutunu belirtmek için yalnızca Text özelliğini ayarlaması en iyisidir.

Xamarin.Forms uygulaması, platforma özgü bilgi almadan oriantation değişikliklerini algılayabilmenin tek yolu olan boyut değişikliklerini izlemektir. Genişlik yükseklikten yüksek mi? Bu landscape. Aksi takdirde, portre.

Varsayılan olarak, Xamarin.Forms solutionları için Visual Studio ve Xamarin Studio template’leri, üç platformda da aygıt yönlendirmesi değişikliklerini etkinleştirir. Yön değişikliklerini devre dışı bırakmak istiyorsanız (örneğin dikey veya yatay modda iyi çalışmayan bir uygulamanız varsa) bunu yapabilirsiniz.

IOS için, önce Info.plist’in içeriğini Visual Studio veya Xamarin Studio’da görüntüleyin. IPhone Deployment Info (Dağıtım Bilgisi) bölümünde hangi yönlendirmelerin izin verileceğini belirlemek için Supported Device Orientations alanını kullanın.

Android için, MainActivity.cs dosyasındaki MainActivity sınıfındaki Activity özelliğine şunları ekleyin:

veya

Solution template’i tarafından oluşturulan Activity özelliği, aynı zamanda ekran yönlendirmesini belirten bir ConfigurationChanges argümanını içerir; ancak ConfigurationChanges’in amacı, telefon yönlendirmesi veya ekran boyutu değiştiğinde activitynin yeniden başlatılmasını engellemektir.

İki Windows Phone projesi için kullanılacak sınıf ve numaralandırma Windows.Graphics.Display namespace’indedir. MainPage.xaml.cs dosyasındaki MainPage constructor’ında static DisplayInformation.AutoRotationPreferences özelliğini, C# bitwise OR işlemiyle birleştirilmiş DisplayOrientations numaralamasının bir veya daha çok üyesine ayarlayın. Programı, yatay veya dikey olarak kısıtlamak için kullanın:

veya

 

 

 

Previous
Xamarin.Forms ile Görüntü İşleme – 2
Next
Xamarin.Forms Farklı Cihazlarda Gerçek Boyutlar – Bölüm 22

Leave a comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir