본문 바로가기

AppDev/Android

[ Android ] 안드로이드 줄 바꿈 처리

안드로이드에서 기본적으로 줄 바꿈은 단어를 기준으로 한다.

한글은 보통 띄어쓰기를 사용하기 때문에 문제가 없지만 띄어쓰기를 하지 않고 단어를 표시하고 싶거나

일본어와 같이 기본적으로 띄어쓰기를 사용하지 않을 때 자동 줄 바꿈에 대해 알아보자.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/oasis"
>

    <TextView
        android:id="@+id/lyt_papyrus"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:background="@drawable/img_papyrus_background"
        android:padding="13dp"
        android:elevation="5dp"
        android:text="사과바나나파인애플딸기블루베리망고수박참외두리안멜론복숭아코코넛망고파파야체리"
        android:textSize="20dp"
        android:breakStrategy="balanced"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
    />

</androidx.constraintlayout.widget.ConstraintLayout>

activity_main.xml


안드로이드 텍스트 및 크기를 아래와 같이 설정할 경우 모바일 기기에 따라 다르지만 단어별 줄바꿈 처리가 되지 않는 것을
확인할 수 있다.

android:text="사과바나나파인애플딸기블루베리망고수박참외두리안멜론복숭아코코넛망고파파야체리"
android:textSize="20dp"


보통 줄 바꿈 처리를 위해 개행문자(\n)를 삽입한다.

android:text="사과바나나파인애플딸기\n블루베리망고수박참외\n두리안멜론복숭아코코넛\n망고파파야체리"
android:textSize="20dp"


글씨 크기가 작다는 피드백을 받고 텍스트 크기를 25dp로 크게 키울 경우 아래와 같이 표시가 된다.

개행문자를 수동으로 삽입했기 때문에 모바일 해상도에 따라서도 긴 여백이 발생할 수 있다.

android:text="사과바나나파인애플딸기\n블루베리망고수박참외\n두리안멜론복숭아코코넛\n망고파파야체리"
android:textSize="25dp"


[ &#8203; ] 문자는 사이즈를 가지고 있지 않은 공백문자이다.
하여 단어 사이사이에 삽입할 경우 공간은 차지하지 않은채 삽입된 앞뒤를 다른 단어로 분류를 하여
자동 줄바꿈의 기준이 되게 할 수 있게 된다.

android:text="사과&#8203;바나나&#8203;파인애플&#8203;딸기&#8203;블루베리&#8203;망고&#8203;수박&#8203;참외&#8203;두리안&#8203;멜론&#8203;복숭아&#8203;코코넛&#8203;망고&#8203;파파야&#8203;체리"
android:textSize="25dp"

 

 

또한 안드로이드의 텍스트 속성 중 [ breakStrategy ] 속성이 존재한다.

큰 차이는 느껴지지 않지만 줄 바꿈 알고리즘이 다르다.

# 간단한 줄바꿈 알고리즘을 사용하여 텍스트를 배치(기본값)
# 텍스트가 뷰의 경계에 도달하면 줄바꿈이 이루어진다
# 이 방식은 성능이 가장 좋지만, 복잡한 언어나 긴 단어 처리에는 최적화되어 있지 않음.
android:breakStrategy="simple"

# 텍스트 레이아웃을 보다 정교하게 처리하여 높은 품질의 텍스트 정렬을 제공
# 줄바꿈 시 단어를 분리하는 것을 최소화하고, 가능한 최적의 공간 분배를 시도
# 처리 속도가 느릴 수 있음
android:breakStrategy="high_quality"

# 텍스트 블록의 균형을 맞추기 위해 줄바꿈을 조절
# 이 방식은 전체 텍스트 블록의 시각적 균형을 고려하여 줄바꿈 지점을 선택하며, 
# 보다 균일한 느낌의 텍스트 레이아웃을 생성
android:breakStrategy="balanced"