Xamarin.Forms Sığdırma İşlemleri – 23. Bölüm

Xamarin

Metni mevcut boyuta sığdırma

Belirli bir dikdörtgen alana bir metin bloğu sığdırmanız gerekebilir. Metin karakterlerinin sayısına, dikdörtgen alanın boyutuna ve sadece iki sayıya dayalı olarak Label’ın FontSize özelliği için bir değer hesaplamak mümkündür.

Bölümün Proje Solution’u= https://github.com/SamedBll/XamChap/tree/master/App1

İlk sayı satır aralığıdır. Bu, her satır için bir Label görünümünün dikey yüksekliğidir. Üç platformla ilişkilendirilmiş varsayılan fontlar için, FontSize özelliği ile aşağı yukarı şu şekilde ilişkilidir:

  • iOS: lineSpacing = 1.2 * label.FontSize
  • Android: lineSpacing = 1.2 * label.FontSize
  • Windows Phone: lineSpacing = 1.3 * label.FontSize

İkinci yardımcı sayı, ortalama karakter genişliğidir. Ortalama karakter genişliği yazı tipi boyutunun yaklaşık yarısı kadardır:

  • averageCharacterWidth = 0.5 * label.FontSize

Örneğin, 320 birim genişliğinde 80 karakter içeren bir metin stringine sığdırmak istediğinizi varsayalım ve yazı tipi boyutunun olabildiğince geniş olmasını istiyorsunuz. Genişliği (320), karakter sayısını yarısı kadar bölün (40) ve font boyutunu 8 olan Label’in FontSize özelliğine ayarlayabilirsiniz. Belli belirsiz ve önceden test edilemeyen metinler için, sürprizlerden kaçınmak adına bu hesaplamayı biraz daha ölçülü hale getirmek isteyebilirsiniz.

Birazdan yapacağımız program, bir paragraf metnin sayfaya sığması için satır aralığı ve ortalama karakter genişliği; hem de iPhone üstündeki durum çubuğunun kapladığı alanı ekleyerek kullanır. Bu programda iOS durum çubuğunun biraz daha kolay dışlanması için program ContentView kullanıyor.

ContentView, Layout’dan türetilir, ancak sadece Layout’dan inherit aldığı şeylere bir Content özelliği ekler. ContentView aynı zamanda Frame’in temel sınıfıdır. ContentView dikdörtgen alanı işgal etmekten başka hiçbir işleve sahip değilse de, iki amaç için yararlıdır: çoğu zaman ContentView, yeni bir özel görünüm tanımlamak için diğer görünümlerin üst öğesi olabilir. Ve ContentView, bir margin (kenar) görevi yapabilir.

Bir view’de kenar boşluğu ayarlama gereksinimi duyarsanız, view’i bir ContentView’e yerleştirin ve ContentView’de Padding özelliğini ayarlayın. ContentView, layout’dan bir Padding özelliği miras alır.

Birazdan yapacağımız TahminiFontSize programı ContentView’ı biraz farklı bir şekilde kullanır: iOS durum çubuğundan kaçınmak için sayfadaki normal Paddingi ayarlar, ancak o zaman ContentView öğesinin o sayfanın içeriği olarak ayarlanmasını sağlar. Dolayısıyla, bu ContentView, sayfa ile aynı boyuttadır, ancak iOS durum çubuğu hariçtir. Bu ContentView, SizeChanged eventinin ekli olduğunu ve metin yazı tipi boyutunu hesaplamak için kullanılan bu ContentView boyutudur.

SizeChanged handler, labelın sığacağı nesne olan eventi (bu durumda ContentView) tetikleyen nesneyi elde etmek için ilk argümanı kullanır. Hesaplama şu şekilde açıklanmaktadır:

“? 1”, “?? 2”, “? 3” ve “? 4” olarak adlandırılan metin yer tutucuları benzersiz olacak şekilde seçildi ancak aynı zamanda yerine konan sayılarla aynı sayıda karakter olacak şekilde seçildi.

Uygulamayı çalıştırın ve hatta ekranı yatayda da çevirin. Aynı FontSize’in yatay mod için hesaplandığı her zaman doğru değildir, ancak bazen olur.

Previous
Xamarin.Forms Görüntü İşleme (Image Processing) – 3. Bölüm
Next
Xamarin.Forms Saat Uygulaması – Bölüm 24

Leave a comment

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