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

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



답변

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

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

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

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

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

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

선도는 한 줄의 하단과 다음 줄의 상단 사이의 거리입니다. 위의 그림에서 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.


답변

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

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

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


답변