Android의 FontMetrics에서 상단, 상승, 기준선, 하강, 하단 및 선행의 의미


90

이것은 기본적인 질문처럼 보이지만 비슷한 질문을 찾을 수 없습니다. 문서를 읽는 동안 개념을 이해하는 데 어려움이있었습니다. 나는 차이가 사이에 이해하려는 topascentbottom하고 descent. 그리고 기준선은 정확히 어디에 있습니까? 시각화하는 데 도움이되는 다이어그램이 있습니까?

답변:


289

먼저 문서의 내용을 검토해 보겠습니다 .

  • 위쪽 -지정된 텍스트 크기에서 글꼴에서 가장 긴 글리프에 대한 기준선 위의 최대 거리입니다.
  • Ascent- 단일 간격 텍스트에 대한 기준선 위의 권장 거리입니다.
  • 하강 -단일 간격 텍스트에 대한 기준선 아래의 권장 거리입니다.
  • 아래쪽 -지정된 텍스트 크기에서 글꼴의 가장 낮은 글리프에 대한 기준선 아래의 최대 거리입니다.
  • 행간 -텍스트 줄 사이에 추가 할 권장 추가 공간입니다.

참고는 것을 기준은 처음 네가에서 측정하는 것입니다. 그것은이다 라인 양식 기지 (g, Y, J, 등 같은) 일부 문자는 선 이하로 부품이있을 수 있습니다하더라도, 텍스트에 앉아있다. 줄이 그어진 노트에 쓰는 줄과 비슷합니다.

다음은 이러한 것들을 시각화하는 데 도움이되는 그림입니다.

상단, 오름, 기준선, 괜찮음, 하단 및 행간을 표시하는 FontMetrics

Java 및 Android에서 캔버스에 그릴 때 아래로 내려 가면 y 가 증가 하고 위로 올라가면 y 가 감소 합니다. 즉 폰트 메트릭스 '는 것을 topascent그들이 기준선으로부터 측정되므로 음수이다 (하강 및 바닥 양수 동안). 따라서으로부터의 거리 얻을 topbottom(당신이 할 필요를 bottom- top).

선도는 한 줄의 하단과 다음 줄의 상단 사이의 거리입니다. 위의 그림에서 1 행의 주황색과 2 행의 보라색 사이의 공간입니다. @MajorTom이 아래 에서 언급했듯이 타이포그래피 에서이 용어는 "연속적인 유형의 선 기준선 사이의 거리"로 더 적절하게 정의됩니다. * 그러나 안드로이드는 더 역사적인 의미에서이 용어를 사용하는 것 같습니다. 단어 ( "ledding"이라고 발음 함)는 예전 조판 자들이 유형의 줄 사이에 넣는 데 사용했던 리드 스트립에서 나왔습니다. 기본적으로 줄 간격을 조정하는 방법이었습니다. Android에서 나는 실제로 선두가 다른 것을 본 적이 없습니다.0그리고 나는 그것이 소스 코드에서 어떤 것도 사용하는 것을 보지 못했습니다. (수정 내게 당신이 계산 아무것도에 사용되는 경우 알고있는 경우.) 당신은에서 줄 간격을 변경할 수 있습니다 TextViewsetLineSpacing코드 또는에서 android:lineSpacingExtraandroid:lineSpacingMultiplierXML에. 그러나 이러한 메서드 는 선행을 사용하거나 수정하지 않습니다.

자세한 내용은 다음 링크를 확인하십시오.

더 알아보기

Font Metrics를 더 탐구하기 위해 간단한 프로젝트를 만들었습니다.

여기에 이미지 설명 입력

여기에 모든 코드를 나열하는 대신. 나는 GitHub의에 프로젝트를 추가 . 프로젝트를 복제하거나 다음 파일을 새 프로젝트에 복사 할 수 있습니다.

문자가 top위나 아래 로 이동 bottom합니까?

보통은 아니지만 가능합니다. 내가 이해하는대로 상단과 하단은 글꼴 (즉 "FontMetrics")에 의해 설정되므로 글꼴 제작자는 글리프를 상단이 말하는 것보다 높게 (또는 하단보다 낮게) 만들 수 있습니다. 또한 유니 코드에서 분음 부호결합 하면 매우 쉽게 발생할 수 있습니다. 여기에 다소 극단적 인 예가 있습니다.) :?! M̵̳̙͔̟͕̓̄̉̅ͧ̋͊͌͑͌ͪ̒̿̚a͔̟̝͔ͥ̈̏ͮͯ̇͆̊̒ͦͦ͘͢͜y̵̴̢͕̝̩͈͕̼̣͕̟̌͗̾ͤ͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈͡͠e̵ͯͪ̿̿̄ͫ҉͏͎̣̹̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟ ̣̞͙͚̝̰̞̹̗̣͙͍͍̓͊̋ͣ̏̑̍̊͌ͩ͐ͣͣ̚͟h̛͋̏̍̆ͤ͛͐ͨ̌̋ͤͨ̓̑̚̕͟͏̻̣͖̖͚͚͓̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ṱ̼̖̓ͭ̏̅ͥ͌ͯ͌͠sͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬ ̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛͝ 모자 ̶̨̡͇͚̙͚̭̣̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑͡

이 문자열을 Android에 연결하면 다음과 같은 결과가 나타납니다.

여기에 이미지 설명 입력

분음 부호 topbottom. 하지만 전체 너비와 높이가 텍스트 경계에 의해 정확하게 측정된다는 점은 흥미 롭습니다.

어쨌든, 프로그래밍의 모든 실제적인 목적을 위해, 당신은 단지 문자 모양 문자의 최대 및 최소가 있다고 가정 할 수 있습니다 topbottom. 그리고 일반적으로 그들은 ascentdecent. 어떤 이유로 든 편지가 넘어가 top거나 bottom사용할 수 있는지 확실히 알아야하는 경우 TextPaint.getTextBounds.


좋은! 상승, 하강 등이 어떤 단위로 측정되는지 알고 있습니까? 픽셀 단위입니까? 플로트 값이지만 화면과 어떻게 일치하는지 확실하지 않습니다. 포토샵에서 픽셀인지 확인하고 몇 단위의 약간의 차이가 있는지 확인했습니다. 더 작은 픽셀.
Vikram Gupta

트윗 담아 가기 단위는 픽셀입니다. 포토샵 이미지 확인과 차이가 발생한 원인을 잘 모르겠습니다.
Suragch

유용한 설명과 앱에 감사드립니다. 그러나 정확히 무엇을 설명 할 수 Top있습니까? Top선 에 닿을 수있을 정도로 큰 글자가 있습니까? 예를 들어 "M", "l"이 가장 큰 문자 인 것 같습니다. 그들 중 누구도 건드리지 않습니다 Top.
Cheok Yan Cheng

@CheokYanCheng, 내 답변 끝에 업데이트를 참조하십시오.
Suragch

@Suragch 정보 주셔서 감사합니다. 나는 더 많은 것을 이해하기 위해 당신의 앱을 사용합니다. "Ascent"줄이 스크린 샷 에서처럼 글꼴 상단에 잘 닿을 것으로 예상합니다. 그러나 최신 i.imgur.com/aRxgjvu.png 에서 가장 큰 문자 "M"은 건드리지 않습니다. 왜 그런지 아십니까?
Cheok Yan Cheng

5

행간은 타이포그래피에서 줄 사이의 공백이 아닙니다. 분명히 이것은 Android 코드가 고려하지 않는 것입니다. 우리는 이것으로 스스로 고심하고 있습니다. 선행의 적절한 정의 ( Wikipedia에서 ) :

타이포그래피에서 선행 / lɛdɪŋ /은 연속적인 유형 라인의 기준선 사이의 거리를 나타냅니다. 이 용어는 활자 선 사이의 수직 거리를 늘리기 위해 얇은 납 조각을 양식에 삽입했을 때 손으로 조판하는 시대에 시작되었습니다.

내가 알 수 있듯이 Android에는 이것을 지정할 방법이 없습니다.


내가 선도하는 것을 더 잘 이해할 수 있도록 도와 준 +1. 지금까지 선두를 변경하면 지남에 따라, 당신은 텍스트 뷰의를 사용할 수있는 setLineSpacing코드 나 android:lineSpacingExtraandroid:lineSpacingMultiplierXML에.
Suragch 2016-06-11

감사합니다-예, 우리는 라인 android:lineSpacingExtra사이의 실제 공간 사이에 측정 값을 두는 것을 사용하라는 말을 들었습니다 . 선행은 아니지만 간격을 관리하는 유일한 방법 인 것 같습니다. 타이포그래피에는 그러한 측정이 없기 때문에 문제가되고, Sketch 또는 Zepelin (우리가 사용하는 도구)에서 해당 측정을 지정할 수있는 방법이 없기 때문입니다. 또한 선행과 일치하지 않습니다.
MajorTom

1
인쇄상의 행간이 기준선 사이의 거리라면 계산하기 쉬울 것 같습니다.
Suragch 2016-06-12

그것이 내가 생각했던 거죠. 프로그래밍 방식으로 수행 할 수있는 방법이 있습니까? 나는 안드로이드가 제공하는 방법으로 그것을 할 수있는 방법이 있기를 바랐습니다. 우리가 함께 일하는 개발자들은 모르는 것 같습니다.
MajorTom

이 작업을 한 지 오래되었지만 다시 시도하려면 여기여기에서 시작 하여 다른 텍스트와 글꼴을 실험 해 보겠습니다 . 간단하지 않더라도 필요한 것을 계산할 방법이 없다는 것을 믿을 수 없습니다.
Suragch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.