Trước tiên, hãy xem lại tài liệu nói gì :
- Trên cùng - Khoảng cách tối đa phía trên đường cơ sở cho đường nét cao nhất trong phông chữ ở kích thước văn bản nhất định.
- Đi lên - Khoảng cách được đề xuất phía trên đường cơ sở cho văn bản có khoảng cách đơn.
- Hạ xuống - Khoảng cách được đề xuất bên dưới đường cơ sở cho văn bản có khoảng cách đơn.
- Bottom - Khoảng cách tối đa bên dưới đường cơ sở cho glyph thấp nhất trong phông chữ ở kích thước văn bản nhất định.
- Hàng đầu - Khoảng trống bổ sung được đề xuất để thêm vào giữa các dòng văn bản.
Lưu ý rằng Đường cơ sở là những gì bốn đầu tiên được đo lường từ. Đây là dòng tạo thành nền cho văn bản, mặc dù một số ký tự (như g, y, j, v.v.) có thể có các phần nằm bên dưới dòng. Nó có thể so sánh với những dòng bạn viết trong một cuốn sổ có lót.
Đây là một hình ảnh để giúp hình dung những điều này:
Hãy nhớ rằng khi vẽ trên canvas trong Java và Android, đi xuống là tăng y và đi lên là y giảm . Điều đó có nghĩa là FontMetrics ' top
và ascent
là số âm vì chúng được đo từ đường cơ sở (trong khi gốc và cuối là số dương). Vì vậy, để có được khoảng cách từ top
đến bottom
bạn sẽ cần phải làm ( bottom
- top
).
Các chủ đạo là khoảng cách giữa đáy của một dòng và phía trên cùng của dòng tiếp theo. Trong hình trên, đó là khoảng trống giữa màu cam của Dòng 1 và màu tím của Dòng 2. Như @MajorTom đã lưu ý bên dưới , thuật ngữ này được định nghĩa đúng hơn là "khoảng cách giữa các đường cơ sở của các dòng liên tiếp của loại." * Tuy nhiên, Android dường như sử dụng thuật ngữ này theo nghĩa lịch sử hơn. Từ này (phát âm là "ledding") xuất phát từ dải chì mà các máy sắp chữ cũ dùng để đặt giữa các dòng của loại. Về cơ bản nó chỉ là một cách để điều chỉnh khoảng cách dòng. Trong Android, tôi chưa bao giờ thực sự thấy người dẫn đầu là bất kỳ thứ gì khác ngoài0
và tôi chưa thấy nó được sử dụng cho bất kỳ thứ gì trong mã nguồn. (Hãy sửa lại cho tôi nếu bạn biết nơi nó được sử dụng để tính toán bất cứ điều gì.) Bạn có thể thay đổi khoảng cách dòng trong a TextView
với setLineSpacing
trong mã hoặc android:lineSpacingExtra
và android:lineSpacingMultiplier
trong xml. Tuy nhiên, những phương pháp này không sử dụng hoặc sửa đổi phần đầu.
Kiểm tra các liên kết này để biết thêm thông tin:
Tìm hiểu thêm
Để khám phá thêm về Số liệu Phông chữ, tôi đã thực hiện một dự án đơn giản.
Thay vì liệt kê tất cả các mã ở đây. Tôi đã thêm dự án vào GitHub . Bạn có thể sao chép dự án hoặc sao chép các tệp sau vào một dự án mới.
Các chữ cái có bao giờ đi trên top
hoặc dưới bottom
không?
Không thường xuyên, nhưng họ có thể. Trên và dưới, theo tôi hiểu, được đặt bởi phông chữ (do đó là "FontMetrics"), vì vậy một nhà sản xuất phông chữ có thể làm cho một glyph cao hơn bất cứ điều gì họ nói trên cùng là (hoặc thấp hơn dưới cùng). Ngoài ra, với việc kết hợp các dấu phụ trong Unicode, điều đó rất dễ xảy ra. Đây là một ví dụ khá cực đoan (lấy từ đây): M̵̳̙͔̟̱͕̓̀̄̉̅ͧ̋͊͌͑́͌ͪ̒̿̀̚a͔̟̝͔ͥ̈́̏ͮͯ̇͆̊̒ͦͦ͘͢͜y̵̴̢͕̝̩̱͈͕̼̣͕̟̌͗̾ͤ̎͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤̃ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈́̀́͡͠e̵ͯͪ̿̿̂̄ͫ̃҉͏͎̣̹̱̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟ ̣̞͙͚̝̰̞̹̗̲̣͙͍͍̀̓͊̂̋ͣ̏̑̍̊͌ͩ͐̎̀ͣͣ̚͟ͅh̛͋̏̍̆ͤ͛͐ͨ̌̋ͤ̎̂ͨ̂̓̑̚̕͟͏̻̣͖̖͚͚͓̲̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ͅṱ̱̼̖̓̂ͭ̏̅͂ͥ͌ͯ͌͠sͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬? ̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛́͝ ̧̦̼̘͕̪̠̙͖̦̯̦̘͉͈͕͔̘̻̲͑ͨ̊̈́̐ͫ͐̌ͯ̀͘͝Ḩ̷̸̸̹͉̩̜̹̞ͯ̃̃ͧͬͨ̌̀̾̐̈̇ͧ͛̃͐̀ͦ͞A̴̦̗̬̠͙̭͉̟̺͇̭̰͔͕̯̅̃͋ͪ̈́̉̓̌ͯ̈́͆̋̀ͤ̇̂̿̈́̂͡͡Ṱ̲͎͉̣̳̺̱̜̦̬͕̣͉͇͊̌ͥ͐͒̈́̓́ͥ́́̋͂̅ͬ̆͗ͥ̕͢͡S̍ͧ͗̒͗̂̈ͬ͊̚̚͢͏̗̣̳ͅ! ̶̨̡͇͚̙͚̭̱̣̲̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑̃̎͡
Cắm chuỗi đó vào Android, chúng tôi nhận được điều này:
Các dấu phụ nằm trên top
và dưới bottom
. Tuy nhiên, điều thú vị là tổng chiều rộng và chiều cao được đo chính xác bởi các giới hạn văn bản.
Dù sao, đối với tất cả các mục đích thực tế trong lập trình của bạn, bạn chỉ có thể giả định rằng giá trị tối đa và tối thiểu cho các chữ cái glyph là top
và bottom
. Và thường họ sẽ ở trong ascent
và decent
. Nếu vì lý do gì, bạn cần biết chắc chắn nếu các chữ cái vượt ra ngoài top
hoặc bottom
bạn có thể sử dụng TextPaint.getTextBounds
.