박상권의 삽질블로그

[안드로이드/Android]커스텀 폰트 쉽게 적용하는 방법 - Typekit 본문

IT/Android-TIP (한글)

[안드로이드/Android]커스텀 폰트 쉽게 적용하는 방법 - Typekit

박상권 2015. 7. 2. 20:00

안드로이드 개발자들이 모여있는 오픈채팅방에 참여해보세요 .
Q&A 및 팁을 공유하는 방입니다..
오픈채팅방 참여


블로그를 Medium으로 옮겨서 운영하고 있습니다.
앞으로 새로운 글은 모두 미디엄 블로그를 통해서 올릴 예정입니다.
미디엄에서 다양하고 유익한 포스팅을 살펴보세요
미디엄 블로그 보기


이번에 '클린 아키텍처'를 주제로 온라인 강의를 개설하게 되었습니다 🎉
평소 오픈채팅방이나 여러 커뮤니티에서 '클린 아키텍처'와 관련된 질문들이 많았는데요. 이를 해결해줄 수 있는 마땅한 강의가 없었던것 같습니다.
평소 '클린 아키텍처' 에 대한 궁금증이나 관심이 있으셨던 분들이 수강해보시면 도움이 될것 같아요
강의 살펴보기






커스텀폰트를 사용하면 강제적으로 사용자가 사용중인 폰트를 무시하고 지정한 폰트로 변경하기때문에 이를 불편해하는 사용자도 있습니다.

(설정화면에서 [커스텀폰트], [자신의 폰트] 를 선택할수 있도록 제공해주는게 좋습니다.)





커스텀 폰트를 구현하는 방법은 조금만 찾아봐도 수많은 방법이 존재합니다.

물론 Custom font와 관련된 라이브러리들도 많이 있습니다.


커스텀폰트 라이브러리들 보기




대부분은 CustomFont의 View를 xml에 선언해서 사용하는 방식을 사용합니다.

지금 만들어둔 TextView나 기타 View를 모두 해당 View로 변경해서 xml에 바꾸려면 상당히 귀찮습니다 번거롭습니다

만약 더 좋은 CustomFont 라이브러리가 나와서 변경하고자할때는 그 노가다작업이 더 하기 싫어질겁니다.


그래서 기존에 사용하는 xml들은 그대로 놔두고 간단히 코드 몇줄만으로 전체 앱에 커스텀 폰트를 적용할수 있는 라이브러리들을 찾아보았습니다.


그중에서 가장 대표적인 라이브러리는 Calligraphy 입니다.

Application 클래스에서 폰트경로를 지정해주고 Activity에서 코드 한줄만 추가해주면 끝! 이기 때문이죠

물론 xml에서 폰트경로를 지정해서 넣어주는 방법도 사용할수 있습니다.




하지만 Calligraphy에서는 Normal,Bold,Italic 등에대해서 세부적으로 폰트 경로를 각각 지정해줄수 없었습니다.

(xml에 넣는 방식으로는 가능하지만 그 또한 귀찮 번거로운 방식입니다)


그래서 제가 사용한 커스텀 폰트 라이브러리는 typekit 입니다.





사용 방법


(Gradle추가)

compile 'com.tsengvn:Typekit:1.0.0'





1. Application 클래스에서 설정하고자하는 폰트들의 경로를 적어줍니다


Typekit.getInstance()
.addNormal(Typekit.createFromAsset(this, "fonts/NanumBarunGothic-Regular.otf"))
.addBold(Typekit.createFromAsset(this, "fonts/NanumBarunGothic-Bold.otf"));

여기서는 Normal: 나눔고딕-Regular.otf , Bold: 나눔고딕-Bold.otf 를 적용시켰습니다.









2. Activity의 attachBaseContext 함수에 아래와 같이 선언해줍니다



@Override
protected void attachBaseContext(Context newBase) {

super.attachBaseContext(TypekitContextWrapper.wrap(newBase));

}

각 Activity마다 @Override해서 선언해줄필요 없습니다.

BaseActivity를 만든뒤 모든 Activity가 BaseActivity를 상속받아서 사용하면 위의 코드는 BaeActivity에 한번만 선언해주면 됩니다.






단 2줄의 코딩으로 원하는 커스텀 폰트로의 설정이 끝났습니다.

어때요? 참 쉽죠?








<부록>

사용자의 선택에 따라 [커스텀 폰트], [자체 폰트] 보여주기


위에서 말씀드린대로 커스텀 폰트를 사용한 경우 사용자가 현재 사용중인 폰트를 무시하고 개발자가 지정한 커스텀 폰트가 사용됩니다.

(예) 사용자는 '배달의 민족 주아체' 를 사용하고 있고 개발자가 커스텀 폰트를 '나눔바른고딕'으로 설정한경우 

사용자가 사용하는 모든 앱은 '주아체'로 나오지만 해당 앱만 '나눔바른고딕'으로 나오게되어 사용자는 해당 앱에 대해 거부감을 가질수도 있습니다.



그래서 우리는 커스텀폰트를 적용하되, 사용자가 해당 폰트를 원하지 않는 경우는 사용자의 폰트를 사용하도록 제공해주는게 좋습니다.

이 내용과 관련된 포스팅은 추후에 올릴 예정입니다.


Comments