문자 단위로 TextView의 너비 설정


88

정말 이것 에 대한 답을 찾고 있습니다.

숫자 또는 문자를 기반으로 TextView의 너비를 설정하고 싶습니다. 따라서 항상 3 자 너비를 원할 경우이를 설정하면 textSize 설정에 따라 조정됩니다. 이것이 없으면 글꼴 크기에 따라 맞을 수도 있고 맞지 않을 수도있는 50dip 등으로 너비를 설정해야합니다.


에서 차원을 지정하여이를 수행하는 방법이있을 수 있습니다 sp.
CommonsWare

@CommonsWare, 예, 작동 할 수있는 한 문자와 동일한 SP 수를 말할 수 있다면 (하지만 내가 원하는 것으로 생각하는 minEms를 사용하여 아래의 대답을 참조하십시오). 따라서 텍스트 크기가 30sp이고 너비가 3자인 경우 너비를 90sp로 설정합니까? 나는 그것을 시도 할 수 있다고 생각한다.
Fraggle

2
예, minEms아마도 더 나은 대답 일 것입니다.
CommonsWare

답변:


177

내 질문에 답하는 중 ...

그리고 승자는 : minEms속성 설정 ( android:minEms) !!!

그래서 " ems "는 가장 넓은 문자의 크기, 일반적으로 "M"을 나타냅니다. 알겠습니까? 따라서 minEms를 정수 값 (예 : 3)으로 설정하면 EditText 또는 TextView에서 너비가 3 자 이상인지 확인해야합니다. maxEms도 설정할 수 있습니다.

이 스레드에 대한 Kyle의 답변은 틀렸지 만 답을 찾았습니다. Kyle에게 감사드립니다.


3
물론 이것이 실제로 작동하는지 아직 테스트 중이지만 지금까지는 그렇게 보입니다.
Fraggle

8
또한 이 답변이 지적 했듯이 minEms 및 maxEms가 의도 한대로 작동 layout_width하려면 있어야 합니다. wrap_content
Jonik

0

대부분의 글꼴은 모든 문자 너비를 동일하게 설정하지 않습니다. Courier는 아마도 이것에 대해 가장 많이 사용되는 예외이지만 일반적으로 예를 들어 i와 A의 차이점을 살펴보십시오. 이것은 당신이 요구하는 것에 약간의 문제를 만듭니다.


맞습니다. 그래서 저는이 문제가 해결되기를 바랐습니다. 따라서 문자 단위로 너비를 설정 한 다음 표시 시간에 해당 필드의 글꼴 특성을 찾고이를 기반으로하는 크기를 결정합니다. 이 문제가 아주 쉽게 해결되었는지 정말 물어 봅니다. 그렇지 않은 것 같습니다.
Fraggle

0

다음을 사용해보십시오. android:maxLength="3"

이렇게하면 텍스트가 특정 문자 수로 제한됩니다.


0

ems, 대중적인 신념과는 달리 (또는 적어도 여기에서 ems에 대한 대부분의 스레드에서) 단일 'M'의 너비를 기반으로하지 않습니다.

원래는 타이포그래피에서와 같았지만 Android를 포함한 디지털 매체에서는 그 의미가 사용 된 서체의 크기 또는 다른 말로하면 높이 (악센트 / 분음 부호에 대한 패딩 제외)로 변경되었습니다.

ems, TextView에를 지정할 때 textSize기본으로 사용하고 ems지정된 값을 곱 합니다.

샘플로 16sp TextView ems를 4로 설정하면 너비가 64sp가됩니다. includeFontPaddingConstraintLayout 내에서 두 개의 TextView ( false 로 설정)를 나란히 사용하여 쉽게 테스트 할 수 있습니다 ( layout_constraintDimensionRatio).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.