Android/Developers 공부하기

[res/font] 안드로이드 폰트 리소스 1/2 (개념잡기)

네모메모 2023. 2. 3. 23:11
반응형

 

 

 

개발 시 앱에 노출되는 모든 글자들의 폰트를 설정해야한다.

안드로이드 앱 폰트 설정은

(디자이너가 설정한) font 파일을 추가하고, 이 font들을 번들로 묶어 리소스로 읽어와 적용한다.

 

 

 


[ 안드로이드 font 리소스 ]

- 조건 : Android 8.0(API 수준 26)이상 (<< 이때 XML의 font이 도입되어 font를 리소스로 사용가능해짐)

 

- 폰트 리소스 위치 : res/font/ 폴더 내 사용할 font 파일들을 추가

 

- 코드에서 어떻게 사용?

   R파일에 컴파일되어@font/myfont또는 R.font.myfont를 사용해font 리소스를 참조한다.

      ㄴ> ex) font 폴더에 아래와 같은 font 파일들을 추가하면, 이 폰트들은 R.font.dancing_script, R.font.lobster, R.font.typo_graphica 과 같이 참조된다.

그림 2.&nbsp;리소스 디렉터리에 글꼴 파일 추가

 

 


[ font-family (글꼴 모음) 만들기 ]

font-family 란?

   : 스타일 및 두께 세부정보가 포함된 글꼴 파일 집합체

 

 

왜 필요해??

폰트들을 보면 같은 폰트 스타일이여도 '나눔고딕_normal',  '나눔고딕_bold',  '나눔고딕_extraBold' 식으로 두께 등에 의해 나뉘어서 같은 폰트 스타일이나 별도 파일이므로 각각 별도 리소스가 된다.

하지만 시스템에선 같은 폰트 스타일에 기반해 단일 단위로 접근하고자 하는 경우가 많으므로 

Android에서는 각 스타일과 두께를 별도의 리소스로 참조하는 대신 폰트들을 모아 font-family XML 리소스로 만들어 같은 폰트들을 단일 단위로 호출해 액세스할 수 있다.

 

=> font-family을 사용하면 TextView가 필요에 따라 자체적으로 전환하여  font-family 내 글꼴 파일을 사용한다.

 

 

[font-family 만들기]

  1. font 폴더 > 마우스 오른쪽 버튼 클릭 > New > Font resource file >. New Resource File 
  2. 파일 이름을 입력 > OK > 새로운 글꼴 리소스 XML이 편집기에서 열립니다. (루트태그는 <font-family>)
  3. 각 글꼴 파일, 스타일 및 두께 속성을 <font> 요소로 묶는다.
    ex) 
<?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/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

 

 


[ font (font-family 포함) 적용하기 ]

1. TextView에 font 적용 

: fontFamily 속성

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>

 

2. 스타일에 font 적용 

: styles.xml을 열고 액세스하려는 글꼴 파일로 fontFamily 속성을 설정

<style name="customfontstyle" parent="@android:style/TextAppearance.Small">
    <item name="android:fontFamily">@font/lobster</item>
</style>

 

3. 코드에서 font 검색 및 적용

  3-1. 코드에서 font 검색 :
     getFont(int) 메서드를 호출하여 검색하려는 글꼴의 리소스 식별자를 제공 -> Typeface 객체를 반환

val typeface = resources.getFont(R.font.myfont)
textView.typeface = typeface

  3-2. 코드에서 font 적용 :  

     setTypeface(android.graphics.Typeface, int) 메서드를 사용하여 특정 스타일로 서체를 설정

 

val typeFace: Typeface = Typeface.createFromAsset(getAssets(), "nanumsquare.ttf")
targetTextView.setTypeface(typeFace)

 

 

 

 

 


[출처]

- [공식] https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml?hl=ko 

- https://velog.io/@kbs95123/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%8F%99%EC%A0%81%ED%8F%B0%ED%8A%B8%EC%84%A4%EC%A0%95

 

반응형