Aracılığıyla paylaş


Bölüm 5'in özeti. Boyutlarla ilgilenme

Not

Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.

şu ana kadar içinde Xamarin.Forms birkaç boyutla karşılaşıldı:

  • iOS durum çubuğunun yüksekliği 20'dir
  • varsayılan BoxView genişliği ve yüksekliği 40'dır
  • içindeki varsayılan Padding değer 20'dir Frame
  • üzerindeki StackLayout varsayılan Spacing değer 6'dır
  • Device.GetNamedSize yöntemi sayısal yazı tipi boyutu döndürür

Bu boyutlar piksel değildir. Bunun yerine, her platform tarafından bağımsız olarak tanınan cihazdan bağımsız birimlerdir.

Pikseller, noktalar, dps, DIP'ler ve DIU'lar

Apple Mac ve Microsoft Windows'un geçmişlerinin başlarında, programcılar piksel birimlerinde çalıştı. Ancak, daha yüksek çözünürlüklü ekranların ortaya çıkması, ekran koordinatlarına daha sanallaştırılmış ve soyut bir yaklaşım gerektirir. Mac dünyasında programcılar geleneksel olarak 1/72 inç nokta birimlerinde çalışırken, Windows geliştiricileri 96/1/96 inç tabanlı cihazdan bağımsız birimler (DIU) kullandı.

Ancak mobil cihazlar genellikle yüze çok daha yakın tutulur ve masaüstü ekranlardan daha yüksek çözünürlüğe sahiptir ve bu da daha yüksek bir piksel yoğunluğunun tolere edilebileceği anlamına gelir.

Apple iPhone ve iPad cihazlarını hedefleyen programcılar nokta birimlerinde çalışmaya devam ediyor, ancak inçte bu noktalardan 160 tane var. Cihaza bağlı olarak, noktadan 1, 2 veya 3 piksel olabilir.

Android benzerdir. Programcılar yoğunluk bağımsız piksel (dps) birimlerinde çalışır ve dps ile pikseller arasındaki ilişki 160 dp'den inç'e dayanır.

Windows telefonlar ve mobil cihazlar, 160'a yakın cihazdan bağımsız birimi inç olarak işaret eden ölçeklendirme faktörleri de oluşturdu.

Not

Xamarin.Forms artık Windows tabanlı telefon veya mobil cihazı desteklemez.

Özetle, telefonları ve tabletleri hedefleyen bir Xamarin.Forms programcı, tüm ölçü birimlerinin aşağıdaki ölçütlere dayandığını varsayabilir:

  • İnç için 160 birim, eşdeğer
  • Santimetreye 64 birim

tarafından tanımlanan VisualElement salt okunur Width ve Height özellikler varsayılan olarak –1 "sahte" değerlerine sahiptir. Yalnızca bir öğe boyutlandırıldığında ve düzende barındırıldığında bu özellikler cihazdan bağımsız birimlerdeki öğenin gerçek boyutunu yansıtır. Bu boyut öğesindeki herhangi bir Padding kümeyi içerir, ancak öğesini Marginiçermez.

Görsel öğe veya Height değiştiğinde SizeChanged Width olayı tetikler. WhatSize örneği, program ekranının boyutunu görüntülemek için bu olayı kullanır.

Ölçüm boyutları

MetricalBoxView, bir inç yüksekliğinde ve bir BoxView santimetre genişliğinde görüntülemek için ve HeightRequest kullanırWidthRequest.

Tahmini yazı tipi boyutları

FontSizes örneği, yazı tipi boyutlarını nokta birimleri olarak belirtmek için 160 birimden inçe kuralının nasıl kullanılacağını gösterir. Bu tekniği kullanan platformlar arasındaki görsel tutarlılık değerinden daha Device.GetNamedSizeiyidir.

Metni kullanılabilir boyuta sığdırma

Aşağıdaki ölçütleri kullanarak bir metin bloğunu hesaplayarak belirli bir FontSize dikdörtgene Label sığdırmak mümkündür:

  • Satır aralığı, yazı tipi boyutunun %120'sindedir (Windows platformlarında %130).
  • Ortalama karakter genişliği yazı tipi boyutunun %50'sindedir.

EstimatedFontSize örneği bu tekniği gösterir. Bu program özellik kullanılabilir olmadan önce Margin yazılmıştır, bu nedenle kenar boşluğu simülasyonu yapmak için ayarı Padding ile kullanırContentView.

Tahmini yazı tipi boyutunun üç ekran görüntüsü

Boyuta uygun saat

FitToSizeClock örneği, saati güncelleştirme zamanı geldiğinde uygulamaya düzenli olarak bildirimde bulunan bir zamanlayıcı başlatmak için komutunu Device.StartTimer gösterir. Yazı tipi boyutu, ekranın olabildiğince büyük olması için sayfa genişliğinin altıda birine ayarlanır.

Erişilebilirlik sorunları

EstimatedFontSize programı ve FitToSizeClock programı ince bir kusur içerir: Kullanıcı Android veya Windows 10 Mobile'da telefonun erişilebilirlik ayarlarını değiştirirse, program artık yazı tipi boyutuna göre metnin ne kadar büyük işlendiğini tahmin edebilir. AccessibilityTest örneği bu sorunu gösterir.

Metni ampirik olarak sığdırma

Metni dikdörtgene sığdırmanın bir diğer yolu da işlenen metin boyutunu ampirik olarak hesaplamak ve yukarı veya aşağı ayarlamaktır. Kitaptaki program, öğenin istenen boyutunu elde etmek için görsel öğeyi çağırır GetSizeRequest . Bu yöntem kullanım dışı bırakıldı ve programlar bunun yerine öğesini çağırmalıdır Measure.

için Label, ilk bağımsız değişken kapsayıcının genişliği olmalıdır (kaydırmaya izin vermek için), ikinci bağımsız değişken ise yüksekliği kısıtlanmamış hale getirmek için Double.PositiveInfinity olarak ayarlanmalıdır. EmpiricalFontSize örneği bu tekniği gösterir.