티스토리 뷰

기존에 커스텀 폰트를 만들고 추가하는 과정은 특정 폴더에 폰트 ttf 파일을 추가하고,

이를 Typekit으로 불러오는 거였는데요,

2017년 7월쯤부터 안드로이드 오레오(Android 8) 업데이트로 Font in XML이 생기면서

gradle.build에 Typekit을 추가하면 (compile 'com.tsengvn:Typekit:1.0.0') 에러가 생기게 되었습니다.


앞으로 안드로이드 스튜디오에서 커스텀 폰트를 넣으려면 xml에서 설정하는게 이런 오류를 피할 수 있겠죠

아래는 XML에서 커스텀 폰트를 설정하는 방법입니다.


1. src/main/res폴더에서 오른쪽 클릭, new - Android resource directory로 새 폴더를 만듭니다.

이름은 바꿔도 상관없지만 font로 합니다. Resource type은 font로 해야 합니다. OK를 누릅니다.






2. 새 폴더에 폰트 파일을 넣습니다. (사진엔 대문자가 있지만 저러면 오류납니다.

폰트 파일 이름은 모두 소문자로 해주세요)



3. 새 폴더 오른쪽 클릭, new - Font Resource file을 눌러 xml 파일을 만듭니다. 역시 이름은 자율입니다.


4. font-family 태그 안에 

<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/nanumgothic" />

을 넣습니다. nanumgothic 에는 추가할 폰트 이름을 쓰면 됩니다.

fontStyle은 normal과 Italic이 있고 italic 폰트가 있다면 따로 추가하면 됩니다.


5. 폰트를 적용할 레이아웃 xml 파일에서 android:fontFamily를 입력하고 사용할 폰트를 찾습니다.


폰트 적용이 끝났습니다.


+ 커스텀 폰트를 전체적으로 적용하려면

res/values/style.xml에 아래 파란 내용을 추가해줍니다.

각각 텍스트뷰 기본 폰트, 액션바 기본 폰트를 나눔고딕으로 변경합니다.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textViewStyle">@style/CustomTextView</item>
<item name="android:actionBarStyle">@style/CustomActionBar</item>
</style>

<style name="CustomTextView" parent="@android:style/Widget.DeviceDefault.TextView">
<item name="android:fontFamily">@font/nanumgothic</item>
</style>

<style name="CustomActionBar" parent="@android:style/Widget.DeviceDefault.ActionBar">
<item name="android:fontFamily">@font/nanumgothic</item>
</style>


+빌드를 돌리는데 

'N' is not a valid file-based resource name character: File-based resource names must contain only lowercase a-z, 0-9, or underscore

이런 에러가 납니다.

리소스 폴더 내부에는 대문자를 사용할 수 없는데, 폰트 파일에 대문자가 포함되어 있어 생긴 오류입니다.

폰트 파일을 수정해주면 됩니다. (Rename하려니 읽기전용이라 안되서 폴더에서 삭제하고 소문자로 바꾼 파일을 다시 넣었습니다)


저같은 실수 하지 말고 처음부터 소문자 씁시다ㅠㅠ




댓글