[android] Android의 FontMetrics에서 상단, 상승, 기준선, 하강, 하단 및 선행의 의미
이것은 기본적인 질문처럼 보이지만 비슷한 질문을 찾을 수 없습니다. 문서를 읽는 동안 개념을 이해하는 데 어려움이있었습니다. 나는 차이가 사이에 이해하려는 top
및 ascent
도 bottom
하고 descent
. 그리고 기준선은 정확히 어디에 있습니까? 시각화하는 데 도움이되는 다이어그램이 있습니까?
답변
먼저 문서의 내용을 검토해 보겠습니다 .
- 위쪽 -지정된 텍스트 크기에서 글꼴에서 가장 긴 글리프에 대한 기준선 위의 최대 거리입니다.
- Ascent- 단일 간격 텍스트에 대한 기준선 위의 권장 거리입니다.
- 하강 -단일 간격 텍스트에 대한 기준선 아래의 권장 거리입니다.
- 아래쪽 -지정된 텍스트 크기에서 글꼴의 가장 낮은 글리프에 대한 기준선 아래의 최대 거리입니다.
- 행간 -텍스트 줄 사이에 추가 할 권장 추가 공간입니다.
참고는 것을 기준은 처음 네가에서 측정하는 것입니다. 그것은이다 라인 양식 기지 (g, Y, J, 등 같은) 일부 문자는 선 이하로 부품이있을 수 있습니다하더라도, 텍스트에 앉아있다. 줄이 그어진 노트에 쓰는 줄과 비슷합니다.
다음은 이러한 것들을 시각화하는 데 도움이되는 그림입니다.
Java 및 Android에서 캔버스에 그릴 때 아래로 내려 가면 y 가 증가 하고 위로 올라가면 y 가 감소 합니다. 즉 폰트 메트릭스 ‘는 것을 top
및 ascent
그들이 기준선으로부터 측정되므로 음수이다 (하강 및 바닥 양수 동안). 따라서으로부터의 거리 얻을 top
에 bottom
(당신이 할 필요를 bottom
– top
).
선도는 한 줄의 하단과 다음 줄의 상단 사이의 거리입니다. 위의 그림에서 1 행의 주황색과 2 행의 보라색 사이의 공간입니다. @MajorTom이 아래 에서 언급했듯이 타이포그래피 에서이 용어는 “연속적인 유형의 선 기준선 사이의 거리”로 더 적절하게 정의됩니다. * 그러나 안드로이드는 더 역사적인 의미에서이 용어를 사용하는 것 같습니다. 단어 ( “ledding”이라고 발음 함)는 예전 조판 자들이 유형의 줄 사이에 넣는 데 사용했던 리드 스트립에서 나왔습니다. 기본적으로 줄 간격을 조정하는 방법이었습니다. Android에서 나는 실제로 선두가 다른 것을 본 적이 없습니다.0
그리고 나는 그것이 소스 코드에서 어떤 것도 사용하는 것을 보지 못했습니다. (수정 내게 당신이 계산 아무것도에 사용되는 경우 알고있는 경우.) 당신은에서 줄 간격을 변경할 수 있습니다 TextView
에 setLineSpacing
코드 또는에서 android:lineSpacingExtra
와 android:lineSpacingMultiplier
XML에. 그러나 이러한 메서드 는 선행을 사용하거나 수정하지 않습니다.
자세한 내용은 다음 링크를 확인하십시오.
- 정확한 Android 텍스트 그리기
- Java (및 Android)의 글꼴 메트릭
- 레이아웃 문서
- 자바 : FontMetrics 상승이 잘못 되었나요?
- Android 장치에서 실행할 때 FontMetrics가 올바르지 않습니다. 시뮬레이터 괜찮아요
- Java 글꼴 메트릭 (Java는
top
및 을 사용하지 않는 것 같습니다.bottom
)
더 알아보기
Font Metrics를 더 탐구하기 위해 간단한 프로젝트를 만들었습니다.
여기에 모든 코드를 나열하는 대신. 나는 GitHub의에 프로젝트를 추가 . 프로젝트를 복제하거나 다음 파일을 새 프로젝트에 복사 할 수 있습니다.
문자가 top
위나 아래 로 이동 bottom
합니까?
보통은 아니지만 가능합니다. 내가 이해하는대로 상단과 하단은 글꼴 (즉 “FontMetrics”)에 의해 설정되므로 글꼴 제작자는 글리프를 상단이 말하는 것보다 높게 (또는 하단보다 낮게) 만들 수 있습니다. 또한 유니 코드에서 분음 부호 를 결합 하면 매우 쉽게 발생할 수 있습니다. 여기에 다소 극단적 인 예가 있습니다.) :?! M̵̳̙͔̟͕̓̄̉̅ͧ̋͊͌͑͌ͪ̒̿̚a͔̟̝͔ͥ̈̏ͮͯ̇͆̊̒ͦͦ͘͢͜y̵̴̢͕̝̩͈͕̼̣͕̟̌͗̾ͤ͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈͡͠e̵ͯͪ̿̿̄ͫ҉͏͎̣̹̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟ ̣̞͙͚̝̰̞̹̗̣͙͍͍̓͊̋ͣ̏̑̍̊͌ͩ͐ͣͣ̚͟h̛͋̏̍̆ͤ͛͐ͨ̌̋ͤͨ̓̑̚̕͟͏̻̣͖̖͚͚͓̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ṱ̼̖̓ͭ̏̅ͥ͌ͯ͌͠sͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬ ̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛͝ 모자 ̶̨̡͇͚̙͚̭̣̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑͡
이 문자열을 Android에 연결하면 다음과 같은 결과가 나타납니다.
분음 부호 top
는 bottom
. 하지만 전체 너비와 높이가 텍스트 경계에 의해 정확하게 측정된다는 점은 흥미 롭습니다.
어쨌든, 프로그래밍의 모든 실제적인 목적을 위해, 당신은 단지 문자 모양 문자의 최대 및 최소가 있다고 가정 할 수 있습니다 top
와 bottom
. 그리고 일반적으로 그들은 ascent
및 decent
. 어떤 이유로 든 편지가 넘어가 top
거나 bottom
사용할 수 있는지 확실히 알아야하는 경우 TextPaint.getTextBounds
.
답변
행간은 타이포그래피에서 줄 사이의 공백이 아닙니다. 분명히 이것은 Android 코드가 고려하지 않는 것입니다. 우리는 이것으로 스스로 고심하고 있습니다. 선행의 적절한 정의 ( Wikipedia에서 ) :
타이포그래피에서 선행 / lɛdɪŋ /은 연속적인 유형 라인의 기준선 사이의 거리를 나타냅니다. 이 용어는 활자 선 사이의 수직 거리를 늘리기 위해 얇은 납 조각을 양식에 삽입했을 때 손으로 조판하는 시대에 시작되었습니다.
내가 알 수 있듯이 Android에는 이것을 지정할 방법이 없습니다.