Pertama-tama mari kita tinjau apa yang dikatakan dokumentasinya :
- Atas - Jarak maksimum di atas garis dasar untuk mesin terbang tertinggi dalam font pada ukuran teks tertentu.
- Ascent - Jarak yang disarankan di atas garis dasar untuk teks spasi tunggal.
- Descent - The direkomendasikan jarak di bawah dasar untuk teks spasi diasingkan.
- Bawah - Jarak maksimum di bawah garis dasar untuk mesin terbang terendah pada font pada ukuran teks tertentu.
- Leading - Ruang tambahan yang direkomendasikan untuk menambahkan antar baris teks.
Perhatikan bahwa Baseline adalah tempat pengukuran empat pertama. Ini adalah garis yang membentuk dasar tempat teks berada, meskipun beberapa karakter (seperti g, y, j, dll.) Mungkin memiliki bagian yang berada di bawah garis. Ini sebanding dengan baris yang Anda tulis di buku catatan bergaris.
Berikut adalah gambar untuk membantu memvisualisasikan hal-hal ini:
Ingatlah bahwa saat menggambar pada kanvas di Java dan Android, turun adalah peningkatan y dan ke atas adalah penurunan y. Itu berarti FontMetrics ' top
dan ascent
merupakan angka negatif karena diukur dari baseline (sedangkan descent dan bottom adalah angka positif). Jadi, untuk mendapatkan jarak dari top
ke bottom
Anda perlu melakukan ( bottom
- top
).
Garis terdepan adalah jarak antara bagian bawah satu baris dan puncak baris berikutnya. Pada gambar di atas, ini adalah spasi antara oranye dari Baris 1 dan ungu dari Baris 2. Seperti yang dicatat @MajorTom di bawah ini , dalam tipografi istilah ini lebih tepat didefinisikan sebagai "jarak antara garis dasar dari jenis garis yang berurutan." * Namun, Android tampaknya menggunakan istilah tersebut dalam arti yang lebih historis. Kata (dilafalkan "ledding") berasal dari strip utama yang digunakan oleh juru ketik lama untuk meletakkan di antara baris jenis. Itu pada dasarnya hanya cara untuk menyesuaikan spasi baris. Di Android, saya tidak pernah benar-benar melihat yang terdepan menjadi apa pun selain0
dan saya belum pernah melihatnya digunakan untuk apa pun di kode sumber. (Koreksi saya jika Anda tahu di mana itu digunakan untuk menghitung apa pun.) Anda dapat mengubah spasi baris TextView
dengan setLineSpacing
dalam kode atau android:lineSpacingExtra
dan android:lineSpacingMultiplier
dalam xml. Metode ini , bagaimanapun, tidak menggunakan atau mengubah petunjuk.
Lihat tautan berikut untuk informasi lebih lanjut:
Jelajahi lebih lanjut
Untuk menjelajahi Font Metrics lebih banyak, saya membuat proyek sederhana.
Daripada mencantumkan semua kode di sini. Saya menambahkan proyek ke GitHub . Anda dapat menggandakan proyek, atau menyalin file berikut ke dalam proyek baru.
Apakah huruf pernah naik top
atau turun bottom
?
Biasanya tidak, tapi mereka bisa. Atas dan bawah, seperti yang saya pahami, diatur oleh font (oleh karena itu "FontMetrics"), sehingga pembuat font dapat membuat mesin terbang lebih tinggi dari apa pun yang mereka katakan bahwa bagian atas (atau lebih rendah dari bagian bawah). Selain itu, dengan menggabungkan tanda diakritik di Unicode, hal itu dapat terjadi dengan sangat mudah. Berikut adalah contoh yang agak ekstrim (diambil dari sini): M̵̳̙͔̟̱͕̓̀̄̉̅ͧ̋͊͌͑́͌ͪ̒̿̀̚a͔̟̝͔ͥ̈́̏ͮͯ̇͆̊̒ͦͦ͘͢͜y̵̴̢͕̝̩̱͈͕̼̣͕̟̌͗̾ͤ̎͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤̃ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈́̀́͡͠e̵ͯͪ̿̿̂̄ͫ̃҉͏͎̣̹̱̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟ ̣̞͙͚̝̰̞̹̗̲̣͙͍͍̀̓͊̂̋ͣ̏̑̍̊͌ͩ͐̎̀ͣͣ̚͟ͅh̛͋̏̍̆ͤ͛͐ͨ̌̋ͤ̎̂ͨ̂̓̑̚̕͟͏̻̣͖̖͚͚͓̲̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ͅṱ̱̼̖̓̂ͭ̏̅͂ͥ͌ͯ͌͠sͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬? ̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛́͝ ̧̦̼̘͕̪̠̙͖̦̯̦̘͉͈͕͔̘̻̲͑ͨ̊̈́̐ͫ͐̌ͯ̀͘͝Ḩ̷̸̸̹͉̩̜̹̞ͯ̃̃ͧͬͨ̌̀̾̐̈̇ͧ͛̃͐̀ͦ͞A̴̦̗̬̠͙̭͉̟̺͇̭̰͔͕̯̅̃͋ͪ̈́̉̓̌ͯ̈́͆̋̀ͤ̇̂̿̈́̂͡͡Ṱ̲͎͉̣̳̺̱̜̦̬͕̣͉͇͊̌ͥ͐͒̈́̓́ͥ́́̋͂̅ͬ̆͗ͥ̕͢͡S̍ͧ͗̒͗̂̈ͬ͊̚̚͢͏̗̣̳ͅ! ̶̨̡͇͚̙͚̭̱̣̲̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑̃̎͡
Menancapkan string itu ke Android, kami mendapatkan ini:
Tanda diakritik berada di atas top
dan di bawah bottom
. Menarik untuk dicatat bahwa lebar dan tinggi total diukur dengan benar oleh batas teks.
Bagaimanapun, untuk semua tujuan praktis dalam pemrograman Anda, Anda dapat berasumsi bahwa maks dan min untuk huruf glyph adalah top
dan bottom
. Dan biasanya mereka akan tetap di dalam ascent
dan decent
. Jika karena alasan apapun Anda perlu tahu pasti apakah surat-surat itu melampaui top
atau bottom
dapat Anda gunakan TextPaint.getTextBounds
.
Top
? Apakah akan ada huruf yang cukup tinggi untuk menyentuhTop
garis? Misalnya, "M", "l" sepertinya adalah huruf tertinggi. Tak satu pun dari mereka menyentuhTop
.Leading BUKAN spasi antar baris dalam tipografi. Rupanya ini adalah sesuatu yang tidak diperhitungkan oleh kode Android. Kami sendiri telah berjuang dengan ini. Definisi yang tepat untuk memimpin ( dari Wikipedia ):
Dari apa yang saya tahu, Android tidak memiliki cara untuk menentukan ini.
sumber
setLineSpacing
dalam kode atauandroid:lineSpacingExtra
danandroid:lineSpacingMultiplier
dalam xml.android:lineSpacingExtra
yang akan membuat pengukuran antara ruang aktual di antara garis. Ini tidak memimpin, tapi sepertinya satu-satunya cara untuk mengatur jarak. Ini masalah karena tidak ada pengukuran seperti itu dalam tipografi, dan tidak ada cara untuk menentukan ukuran itu di Sketch atau Zepelin (alat yang kami gunakan). Ditambah itu tidak cocok dengan yang terdepan.