개발 창고/Android

[Android] 폰트(font) 적용하기

Royzero 2024. 2. 13. 23:07
반응형

이 버전에서는 TOC를 지원하지 않습니다. (ex. 모바일)



기본 폰트를 사용하는 경우 사용자의 시스템 설정에 따라 레이아웃이 틀어지는 문제가 발생할 수 있습니다. 특히 버튼 크기, 텍스트 자간, UI 요소의 정렬 등이 예상과 다르게 표시되는 경우가 많습니다.

이러한 이유로 많은 개발자들이 커스텀 폰트를 적용하며, 애플리케이션만의 아이덴티티를 구축하는 데에도 효과적입니다. 전문적이고 세련된 느낌을 주고 싶다면 폰트 적용을 고려해보세요.

무료 폰트 추천: 상업적으로 안전하게 사용 가능한 무료 폰트는 아래 포스팅을 참조하세요.

2024.02.13 - [개발 창고/잡학사전] - [잡학사전] 무료 폰트

프로그램을 제작하다 보면 기본 폰트가 아닌 좀 더 느낌 있는 폰트를 사용하고 싶은 경우가 많은데요 이럴 때, 아무거나 쓰다 보면 윤고딕 사태가 발생하기 쉽죠. https://ppss.kr/archives/14720


Android 폰트 적용 방법

준비사항

중요: 폰트 파일명은 반드시 소문자언더스코어(_) 만 사용해야 합니다.

  • 잘못된 예: MapoDPP.otf, Nanum-Gothic.ttf
  • 올바른 예: mapo_dpp.otf, nanum_gothic.ttf

1. font 리소스 폴더 생성

app/src/main/res 경로에 font 폴더를 생성합니다.

Android Studio에서 생성하기:

  1. res 폴더에서 우클릭
  2. New → Android Resource Directory 선택
  3. Resource type을 font로 선택
  4. OK 클릭

app - src - main - res - font


2. 폰트 파일 추가

생성한 font 폴더에 폰트 파일(.ttf 또는 .otf)을 복사합니다.

지원 파일 형식:

  • .ttf (TrueType Font)
  • .otf (OpenType Font)

font 폴더에 폰트 파일 추가


3. 폰트 적용하기

방법 1: 개별 View에 적용

XML 레이아웃에서 android:fontFamily 속성을 사용합니다.

<!-- filepath: app/src/main/res/layout/activity_main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="#eaeaea">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="커스텀 폰트 테스트"
        android:textSize="24sp"
        android:fontFamily="@font/netmarble_m" />

</RelativeLayout>

Kotlin 코드에서 적용:

// filepath: app/src/main/java/com/example/MainActivity.kt
textView.typeface = ResourcesCompat.getFont(this, R.font.netmarble_m)

적용 전

적용 후

andorid:fontFamily에 @font/netmarble_m을 적용하면 위와 같이 변경됨을 알 수 있습니다.


방법 2: 앱 전체에 기본 폰트로 적용

위치: res > values > styles.xml

styles.xml에서 앱 테마에 폰트를 설정하면 모든 TextView에 자동 적용됩니다.

<!-- filepath: app/src/main/res/values/styles.xml -->
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <!-- 전체 앱에 기본 폰트 적용 -->
        <item name="android:fontFamily">@font/netmarble_m</item>
    </style>
</resources>

Material Design 3 (Material You) 사용 시:

<!-- filepath: app/src/main/res/values/themes.xml -->
<resources>
    <style name="AppTheme" parent="Theme.Material3.Light">
        <item name="fontFamily">@font/netmarble_m</item>
        <item name="android:fontFamily">@font/netmarble_m</item>
    </style>
</resources>

Appt Theme에 item으로 android:fontFamily를 적용해주면 해당 스타일이 적용된 전체 애플리케이션의 공통 폰트가 netmarble_m이 됨을 확인할 수 있습니다.


추가 팁

1. Font Family 정의로 다양한 스타일 관리

<!-- filepath: app/src/main/res/font/netmarble_font_family.xml -->
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/netmarble_m" />
    <font
        android:fontStyle="normal"
        android:fontWeight="700"
        android:font="@font/netmarble_b" />
</font-family>

2. APK 크기 최적화

  • 필요한 글리프(문자)만 포함된 경량 폰트 사용
  • 한글 폰트의 경우 서브셋(subset) 버전 고려
  • 예상 APK 증가량: 한글 폰트 약 2-5MB

3. 폰트 라이선스 확인

  • 상업적 사용 가능 여부 확인
  • 앱 내 포함(embedding) 허용 여부 확인
  • 필요시 출처 표기

문제 해결

폰트가 적용되지 않는 경우:

  1. 파일명에 대문자나 특수문자 사용 여부 확인
  2. Clean Project 후 Rebuild (Build → Clean Project)
  3. 폰트 파일 손상 여부 확인
  4. minSdkVersion 16 이상 확인

앱 크기가 너무 커지는 경우:

  • Google Fonts의 Downloadable Fonts API 활용 고려
  • 한글 폰트 서브셋 사용

이 방법으로 Android 앱에 일관되고 전문적인 폰트를 적용할 수 있습니다.

반응형