Signification du sumt, de l’ascension, de la ligne de base, de la descente, du bas et du début dans FontMesortingcs d’Android

Cela semble être une question de base, mais je ne pouvais pas en trouver une similaire sur SO. En lisant la documentation , j’avais du mal à comprendre les concepts. Je veux comprendre quelle est la différence entre le top et l’ ascent et aussi le bottom et la descent . Et où est exactement la base? Avez-vous un diagramme pour m’aider à le visualiser?

Voyons d’abord ce que dit la documentation :

  • Haut – La distance maximale au-dessus de la ligne de base pour le plus grand glyphe de la police à une taille de texte donnée.
  • Ascent – La distance recommandée au-dessus de la ligne de base pour le texte espacé unique.
  • Descente – La distance recommandée en dessous de la ligne de base pour le texte espacé singulier.
  • Bottom – La distance maximale sous la ligne de base pour le glyphe le plus bas de la police à une taille de texte donnée.
  • Leading – L’espace supplémentaire recommandé pour append des lignes de texte.

Notez que la ligne de base est ce que les quatre premiers sont mesurés. C’est la ligne qui forme la base sur laquelle le texte repose, même si certains caractères (comme g, y, j, etc.) peuvent avoir des parties allant au-dessous de la ligne. Il est comparable aux lignes sur lesquelles vous écrivez dans un cahier rayé.

Voici une image pour aider à visualiser ces choses:

FontMetrics montrant le haut, l'ascension, la ligne de base, le décent, le bas et le début

Rappelez-vous que lorsque vous dessinez sur un canevas en Java et Android, la baisse est une augmentation de y et la montée est une diminution de y. Cela signifie que le top et l’ ascent FontMesortingcs sont des nombres négatifs car ils sont mesurés à partir de la ligne de base (alors que la descente et le bas sont des nombres positifs). Ainsi, pour obtenir la distance entre le top et le bottom vous devrez le faire (en top ).

Le leader est la distance entre le bas d’une ligne et le haut de la ligne suivante. Dans l’image ci-dessus, il s’agit de l’espace entre l’orange de la ligne 1 et le violet de la ligne 2. Comme @MajorTom noté ci – dessous , le terme est plus correctement défini comme “la distance entre les lignes de base des lignes successives”. * Cependant, Android semble utiliser le terme dans un sens plus historique. Le mot (prononcé “ledding”) vient de la bande de plomb que les anciennes typographes utilisaient entre les lignes de type. C’était simplement un moyen d’ajuster l’interligne. En Android, je n’ai jamais vu le leader être différent de 0 et je ne l’ai jamais vu utiliser pour le code source. (Corrigez-moi si vous savez où il est utilisé pour calculer quoi que ce soit.) Vous pouvez changer l’interligne dans TextView avec setLineSpacing en code ou android:lineSpacingExtra et android:lineSpacingMultiplier en XML. Ces méthodes , cependant, n’utilisent ni ne modifient le principal.

Consultez ces liens pour plus d’informations:

  • Dessin de texte précis sur Android
  • Mesures de police en Java (et Android)
  • Documentation de mise en page
  • Java: ascension de FontMesortingcs incorrecte?
  • FontMesortingcs n’est pas correct lorsqu’il est exécuté sur un appareil Android. Simulateur bien
  • Java Font Mesortingcs (Java ne semble pas utiliser le top et le bottom )

Explore plus

Pour mieux explorer Font Mesortingcs, j’ai réalisé un projet simple.

entrer la description de l'image ici

Plutôt que d’énumérer tout le code ici. J’ai ajouté le projet à GitHub . Vous pouvez soit cloner le projet, soit copier les fichiers suivants dans un nouveau projet.

  • FontMesortingcsView.java (une vue personnalisée)
  • MainActivity.java
  • activity_main.xml

Les lettres vont-elles au- top ou au-dessous du bottom ?

Pas habituellement, mais ils pourraient. Si je comprends bien, le haut et le bas sont définis par la police (d’où “FontMesortingcs”). Ainsi, un créateur de fonts peut faire passer un glyphe plus haut que ce qu’il dit (ou plus bas que le haut). En outre, la combinaison de signes diacritiques dans Unicode peut très facilement se produire. Voici un exemple assez extrême (tiré ici ):! M̵̳̙͔̟͕̓̄̉̅ͧ̋͊͌͑͌ͪ̒̿̚a͔̟̝͔ͥ̈̏ͮͯ̇͆̊̒ͦͦ͘͢͜y̵̴̢͕̝̩͈͕̼̣͕̟̌͗̾ͤ͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈͡͠e̵ͯͪ̿̿̄ͫ҉͏͎̣̹̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟ ̣̞͙͚̝̰̞̹̗̣͙͍͍̓͊̋ͣ̏̑̍̊͌ͩ͐ͣͣ̚͟h̛͋̏̍̆ͤ͛͐ͨ̌̋ͤͨ̓̑̚̕͟͏̻̣͖̖͚͚͓̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ṱ̼̖̓ͭ̏̅ͥ͌ͯ͌͠sͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬ ̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛͝ CHAPEAUX ̶̨̡͇͚̙͚̭̣̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑

En branchant cette chaîne dans Android, nous obtenons ceci:

entrer la description de l'image ici

Les signes diacritiques vont au- top et au-dessous du bottom . Il est intéressant de noter que la largeur et la hauteur totales sont correctement mesurées par les limites du texte.

Quoi qu’il en soit, à toutes fins utiles dans votre programmation, vous pouvez simplement supposer que les valeurs max et min pour les lettres de glyphes sont en top et en bottom . Et généralement, ils restront dans l’ ascent et decent . Si, pour une raison quelconque, vous devez savoir avec certitude si les lettres vont au-delà du top ou du bottom vous pouvez utiliser TextPaint.getTextBounds .

Le leader n’est PAS un espace entre les lignes de la typographie. Apparemment, c’est quelque chose dont le code Android ne tient pas compte. Nous avons lutté avec cela nous-mêmes. La bonne définition du leader (à partir de Wikipedia ):

En typographie, en tête / ˈlɛdɪŋ / se réfère à la distance entre les lignes de base des lignes de type successives. Le terme est apparu à l’époque de la composition manuelle, lorsque de fines bandes de plomb ont été insérées dans les formulaires pour augmenter la distance verticale entre les lignes de type.

D’après ce que je peux dire, Android n’a aucun moyen de spécifier cela.