스마트폰/안드로이드

android 의 신기능 fontfamily 로 폰트 적용을 쉽게

나를찾는아이 2017. 10. 18. 19:34
728x90
반응형

안드로이드 8.0(api level 26)에서부터 xml을 이용한 폰트 기능이 추가가 되었습니다.


https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html


res/font/ 폴더에 폰트 파일을 넣고


@font/myfont, R.font.myfont 


이런식으로 코딩이 가능해졌습니다.



이전에도 안드로이드에서 폰트를 변경할수 있는 기능이 없는건 아니었지만


커스텀뷰를 만들거나, 번거로운방법을 사용했어야 했거든요.


좀 더 편해지고 코드의 가독성도 높아지고, 유지보수 코스트도 낮아졌습니다.



api level 26이 아니더라도


support library 26을 사용해서 api level 14이상부터 


해당 기능을 사용하실수 있습니다.



하지만 안드로이드 스튜디오 3.0 이상을 사용해야 한다는건 알아두세요



사용방법도 어렵지 않습니다.



res/font 폴더를 만들고 그 안에 폰트 파일을 넣습니다.


그리고 lobster.xml이라는 폰트패밀리 파일을 만듭니다.(물론 res/font 폴더에)



<?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>



이렇게 만들면

fontstyle 이 normal 에서는 lobster_regular가

fontstyle 이 italic 에서는 lobster_italic폰트를 불러오게 됩니다.

좀 아쉬운점은 fontstyle bold에 대한 케이스는 지원을 안하더군요.

예를 들면 bold fontstyle일때는 다른 두꺼운 폰트를 사용하고 싶은데

그렇게 사용하기가 약간 애매합니다.


여튼 이렇게 파일을 만들고 난 뒤에


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



텍스트뷰든 어디든 fontfamily 속성을 사용하면 됩니다.



참 쉽죠?



여기에 한가지더


위의 코드로는 안드로이드 8.0이상에서만 사용하기 때문에 우리는


하위 호환을 위해 support library를 사용해야 합니다.


그렇게 하기 위해서는 fontfamily xml파일을 만들때



<?xml version="1.0" encoding="utf-8"?>

<font-family xmlns:android="http://schemas.android.com/apk/res/android"

             xmlns:app="http://schemas.android.com/apk/res-auto">

    <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/myfont-Regular"

          app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>

    <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/myfont-Italic"

          app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />

</font-family>



app 네임스페이스로 속성값을 한번더 적어주시면 됩니다.

728x90
반응형