[Android] TextView에 AutoSize 적용이 왜 안되지??

김병수·2021년 6월 17일
1
post-thumbnail

오늘은 TextView에 AutoSize를 적용하는 방법에 대해 작성해보고자 한다. 며칠 전부터 AutoSize를 적용하려고 노력했지만, 어째서인지 적용되지 않았고 이를 해결하기 위해서 안드로이드 공식 문서도 찾아보고 구글링도 많이 해봤지만 내가 원하는 내용은 없었다. 그렇게 삽질을 계속하다가 결국 해결법을 알게 되었는데, 해결법이 너무나도 간단해서 허무했다..
그럼 지금부터 TextView에 AutoSize를 적용하는 방법에 대해 알아보자!

공식 문서 내용을 먼저 확인해보자

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview

안드로이드 공식 문서 내용을 먼저 확인해보면, 아래와 같은 방식으로 AutuSize를 적용할 수 있다고 나와있다.

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="12sp"
    android:autoSizeMaxTextSize="100sp"
    android:autoSizeStepGranularity="2sp" />

먼저 autoSizeTextType 값을 "uniform" 으로 설정하고,
autoSizeMinTextSize 값과 autoSizeMaxTextSize 값으로 최소 및 최대 텍스트 사이즈를 설정하고,
autoSizeStepGranularity 값으로 텍스트 사이즈가 변경되는 단위를 설정하면 된다고 한다.

이 방법 외에도 res/values/arrays.xml 파일에 배열을 만들어서 값을 미리 지정해서 사용할 수 도 있다고 하는데 이 방법은 내가 사용하는 방법이 아니므로 패스.. (공식 문서에 자세하게 나와있으니 필요하신 분들은 공식 문서를 참고하시면 될 것 같습니다)

그래서 공식 문서에서 알려주는 방법을 그대로 내 코드에 적용했고, 그 코드는 다음과 같다.

    <TextView
        android:id="@+id/totalTradePrice"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:autoSizeMaxTextSize="14sp"
        android:autoSizeMinTextSize="6sp"
        android:autoSizeStepGranularity="1sp"
        android:autoSizeTextType="uniform"
        android:gravity="right"
        android:text="12,217,996백만" />

내가 원했던 결과는 [6sp, 14sp]의 범위에서 1sp 단위로 텍스트 크기가 자동으로 설정되는 것이었는데, 그렇게 되지 않았다.
그래서 이래저래 구글링도 하고 스택오버플로우에서 검색도 해본 결과, 다음과 같은 문제점과 해결법을 알게 되었다.

문제점과 해결방법

1. "wrap_content" 를 사용하면 안된다.

안드로이드 공식 문서에서도 나와있는 내용이라고 하는데, TextView에 AutoSize를 적용할 때에는 layout_widthlayout_height 값으로 "wrap_content" 를 사용하면 정상적으로 작동하지 않는다고 한다.
그래서 이를 해결하기 위해서 layout_height 값을 "40dp" 로 설정했다.

물론 "match_parent" 값을 사용해도 되고, "0dp" 값과 함께 layout_weight 속성을 사용해도 정상적으로 작동한다고 한다.

2. "maxLines" 속성을 "1" 로 설정해야 한다.

기본적으로 TextView는 TextView에 보여주고자 하는 문자열의 길이에 따라 한 줄로 나타나기도 하고, 여러 줄로 나타나기도 한다.
그래서 maxLines 값을 "1" 로 설정하지 않고 AutoSize를 적용하게 될 경우, 텍스트의 길이가 길어져도 텍스트의 사이즈가 줄어들지 않고 텍스트가 여러 줄의 형태로 나타나게 되는 문제가 발생하게 된다.

이 두개의 문제가 나를 괴롭혔는데 위의 문제점을 수정한 코드는 다음과 같다.

    <TextView
        android:id="@+id/totalTradePrice"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:autoSizeMaxTextSize="14sp"
        android:autoSizeMinTextSize="6sp"
        android:autoSizeStepGranularity="1sp"
        android:autoSizeTextType="uniform"
        android:gravity="right"
        android:maxLines="1"
        android:text="12,217,996백만" />

이렇게하면 정상적으로 AutoSize가 적용된다.

profile
주니어 안드 개발자

0개의 댓글