개발 시 앱에 노출되는 모든 글자들의 폰트를 설정해야한다.
안드로이드 앱 폰트 설정은
(디자이너가 설정한) 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 과 같이 참조된다.
[ font-family (글꼴 모음) 만들기 ]
font-family 란?
: 스타일 및 두께 세부정보가 포함된 글꼴 파일 집합체
왜 필요해??
폰트들을 보면 같은 폰트 스타일이여도 '나눔고딕_normal', '나눔고딕_bold', '나눔고딕_extraBold' 식으로 두께 등에 의해 나뉘어서 같은 폰트 스타일이나 별도 파일이므로 각각 별도 리소스가 된다.
하지만 시스템에선 같은 폰트 스타일에 기반해 단일 단위로 접근하고자 하는 경우가 많으므로
Android에서는 각 스타일과 두께를 별도의 리소스로 참조하는 대신 폰트들을 모아 font-family XML 리소스로 만들어 같은 폰트들을 단일 단위로 호출해 액세스할 수 있다.
=> font-family을 사용하면 TextView가 필요에 따라 자체적으로 전환하여 font-family 내 글꼴 파일을 사용한다.
[font-family 만들기]
- font 폴더 > 마우스 오른쪽 버튼 클릭 > New > Font resource file >. New Resource File 창
- 파일 이름을 입력 > OK > 새로운 글꼴 리소스 XML이 편집기에서 열립니다. (루트태그는 <font-family>)
- 각 글꼴 파일, 스타일 및 두께 속성을 <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