Önce belgelerin ne dediğini inceleyelim :
- Üst - Belirli bir metin boyutunda fonttaki en uzun glif için taban çizgisinin üzerindeki maksimum mesafe.
- Yükselme - Tek aralıklı metinler için taban çizgisinin üzerinde önerilen mesafe.
- Alçalma - Tek aralıklı metin için taban çizgisinin altında önerilen mesafe.
- Alt - Belirli bir metin boyutunda fonttaki en düşük glif için taban çizgisinin altındaki maksimum mesafe.
- Satır Aralığı - Metin satırları arasına eklemek için önerilen ek boşluk.
Not o Temel ilk dört ölçülen budur. Öyle hat oluşturan taban (g, y, j, vb gibi) bazı karakterler sınırının altında gitmek kısımlara sahip olabileceği halde, metin üzerinde oturuyor. Çizgili bir not defterine yazdığınız satırlarla karşılaştırılabilir.
İşte bunları görselleştirmeye yardımcı olacak bir resim:
Java ve Android'de bir tuval üzerine çizim yaparken, aşağı inmenin y'de bir artış ve yukarı gitmenin y'de bir azalma olduğunu unutmayın . Bu, FontMetrics'in top
ve ascent
taban çizgisinden ölçüldükleri için negatif sayılar olduğu anlamına gelir (iniş ve alt pozitif sayılar iken). Böylece mesafeyi almak için top
için bottom
(yapmanız gerekir bottom
- top
).
Ve bunu kaynak kodunda herhangi bir şey için kullanılan görmedik. (Doğru bana bunu hesapla şey için kullanılır nerede biliyorsanız.) Bir satır aralığının değiştirebilir ile kodunda veya veLider bir satır alt ve bir sonraki satırın üstüne arasındaki mesafedir. Yukarıdaki resimde, Satır 1'in turuncusu ile Satır 2'nin moru arasındaki boşluktur. @MajorTom'un aşağıda belirtildiği gibi , tipografide terim daha doğru bir şekilde "ardışık türdeki satırların taban çizgileri arasındaki mesafe" olarak tanımlanır. * Ancak Android bu terimi daha tarihsel anlamda kullanıyor gibi görünüyor. Kelime ("yerleştirme" olarak telaffuz edilir), eski dizgecilerin yazı satırları arasına koymak için kullandıkları kurşun şeritten gelir. Temelde satır aralığını ayarlamanın bir yoluydu. Android'de aslında liderin şu kadar olduğunu hiç görmedim:0
TextView
setLineSpacing
android:lineSpacingExtra
android:lineSpacingMultiplier
xml. Ancak bu yöntemler , öncü kullanmaz veya değiştirmez.
Daha fazla bilgi için şu bağlantılara göz atın:
Daha fazlasını keşfedin
Yazı Tipi Metriklerini daha fazla keşfetmek için basit bir proje yaptım.
Tüm kodu burada listelemek yerine. Ben GitHub'dan projeyi ekledi . Ya projeyi klonlayabilir ya da aşağıdaki dosyaları yeni bir projeye kopyalayabilirsiniz.
Harfler hiç yukarı top
veya aşağı gider mibottom
mi?
Genelde değil ama yapabilirlerdi. Üst ve alt, anladığım kadarıyla, yazı tipi tarafından belirlenir (dolayısıyla "FontMetrics"), böylece bir yazı tipi oluşturucu, bir glifin üstte olduğunu söylediklerinden daha yükseğe (veya alttan daha aşağıya) çıkmasını sağlayabilir. Ayrıca Unicode'da aksan işaretleri birleştirildiğinde bu çok kolay bir şekilde gerçekleşebilir. İşte oldukça uç bir örnek ( buradan alınmıştır): M̵̳̙͔̟̱͕̓̀̄̉̅ͧ̋͊͌͑́͌ͪ̒̿̀̚a͔̟̝͔ͥ̈́̏ͮͯ̇͆̊̒ͦͦ͘͢͜y̵̴̢͕̝̩̱͈͕̼̣͕̟̌͗̾ͤ̎͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤̃ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈́̀́͡͠e̵ͯͪ̿̿̂̄ͫ̃҉͏͎̣̹̱̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟ ̣̞͙͚̝̰̞̹̗̲̣͙͍͍̀̓͊̂̋ͣ̏̑̍̊͌ͩ͐̎̀ͣͣ̚͟ͅh̛͋̏̍̆ͤ͛͐ͨ̌̋ͤ̎̂ͨ̂̓̑̚̕͟͏̻̣͖̖͚͚͓̲̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ͅṱ̱̼̖̓̂ͭ̏̅͂ͥ͌ͯ͌͠sͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬? ̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛́͝ ̧̦̼̘͕̪̠̙͖̦̯̦̘͉͈͕͔̘̻̲͑ͨ̊̈́̐ͫ͐̌ͯ̀͘͝Ḩ̷̸̸̹͉̩̜̹̞ͯ̃̃ͧͬͨ̌̀̾̐̈̇ͧ͛̃͐̀ͦ͞A̴̦̗̬̠͙̭͉̟̺͇̭̰͔͕̯̅̃͋ͪ̈́̉̓̌ͯ̈́͆̋̀ͤ̇̂̿̈́̂͡͡Ṱ̲͎͉̣̳̺̱̜̦̬͕̣͉͇͊̌ͥ͐͒̈́̓́ͥ́́̋͂̅ͬ̆͗ͥ̕͢͡S̍ͧ͗̒͗̂̈ͬ͊̚̚͢͏̗̣̳ͅ! ̶̨̡͇͚̙͚̭̱̣̲̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑̃̎͡
Bu dizeyi Android'e takarak şunu elde ederiz:
Aksan işaretleri üstünde gidip top
aşağıda bottom
. Bununla birlikte, toplam genişliğin ve yüksekliğin metin sınırları tarafından doğru bir şekilde ölçüldüğünü not etmek ilginçtir.
Her neyse, programlamanızdaki tüm pratik amaçlar için, glif harfleri için maksimum ve minimum değerlerinin top
ve olduğunu varsayabilirsiniz bottom
. Ve genellikle ascent
ve içinde kalacaklar descent
. Her ne sebeple olursa olsun, harflerin ötesine geçip geçmediğini bilmeniz gerekiyorsa top
veya bottom
kullanabilirsiniz TextPaint.getTextBounds
.