본문 바로가기
Android 개발/android :: Tip

[안드로이드 Toolbar] CollapsingToolbarLayout 에 외부 폰트(font) 적용하기

by 독학하는 1인 개발자 2019. 9. 19.

Android 개발 Tip.

 

- CollapsingToolbarLayout

 

외부 폰트(font) 적용하는 방법

 

Typeface.createFromAsset

 

setCollapsedTitleTypeface

 

setExpandedTitleTypeface

 

 

 

 

 

그냥 toolbar가 아닌

 

CollapsingToolbarLayout 안에 있는 toolbar

 

외부 폰트를 적용하는 방법에 대해서

상당히 애를 먹었다.

 

 

 

일단 CollapsingToolbarLayout 안의 toolbar에 외부 폰트를 적용할 때는

toolbar에다가 속성을 넣어주면

절대 안 먹힌다.

 

 

그래서 CollapsingToolbarLayout에 속성을 넣어줬는데

그래도 안 먹힌다.

 

 

미치는 줄 알았다.

 

 

 

구글링을 통해서

StackOverFlow나 국내 블로그 등 온갖 방법들을 다 찾아봤지만

되는 게 하나도 없었다.

 

 

 

1. 안 되는 것들

 

(폰트 파일은 res/font/ 폴더에 있는 상태)

 

- style파일에 직접 스타일 지정해서 넣기 (안 됨)

- xml파일로 속성 넣기 (안 됨)

1
2
3
<style name="MyToolbarStyle">
<item name="android:fontFamily">@font/폰트파일명</item>
</style>
cs

이런 식으로 직접 스타일을 지정해서

(style에서 parent 속성도 사이트마다 넣으라는 거 다 넣어 봤는데 똑같이 안 된다.)

 

 

또는

1
2
3
4
5
6
7
8
9
10
<android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:toolbarId="@+id/toolbar"
            app:collapsedTitleTextAppearance="@style/CollapsingStyle"
            app:expandedTitleTextAppearance="@style/ExpandedStyle">
cs

이런식으로 xml 파일을 수정하든

 

 

 

 

또는 

저것들 뿐만이 아니라 

 

Toolbar에 넣든

CollapsingToolbarLayout에 넣든

style 파일에 넣든 

xml 파일에 속성으로 넣든

theme 속성을 넣든

textAppearance 속성을 넣든

fontFamily 속성을 넣든

app: 을 붙여서 하든

android: 를 붙여서 하든

fontPath를 넣든

collapsedTitleTextAppearance 속성도

expandedTitleTextAppearance 속성도

 

온갖 경우의 수를 다 실행해봤지만 되지 않았다.

 

 

보는 사람 입장에서는 이렇게 해보면 될거에요~ 라고 할 수 있지만

시키는 건 그대로 따라서 다 해봤다.

안 된다!!!

진짜로 다 해봤다ㅋㅋㅋㅋㅋㅋ

 

 

자바 코드에서도

별에 별 방법을 다 해봤지만

하나도 안 된다.

 

StackOverFlow의 질문자들이 답변마다 달아놓은 대답도 나랑 같았다.

it does not work...

it does not work...

it does not work...

it does not work...

it does not work...

 

 

생각보다 많은 사람들이 잘 모르는 건가 싶었다.

 

해결책이라고 올려주는 사람들도

그냥 모르는데 대충 올리는 것 같았다.

되는 게 하나도 없었다.

 

 

 

근데 하나 웃긴건

혹시나 해서 안드로이드 기본 폰트 중에서 (예를 들면 san-serif, casual 등)

하나 정해서 이렇게 쓰면 정상적으로 되는데

<item name="android:fontFamily">casual</item>

 

외부 폰트는 안 된다는 점이었다.

 

 

 

물론 개발 환경마다 다르니까 나만 안 될 수도 있겠지만

 

아무튼 내 경우와 같이 저런 것들이 다 안 먹히는 경우에는

 

해결방법을 하나 찾았다.

 

 

 

2. 되는 방법

1
2
3
4
5
6
7
CollapsingToolbarLayout toolbar_layout;
toolbar_layout = findViewById(R.id.toolbar_layout);
 
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/폰트파일명.ttf");
 
toolbar_layout.setCollapsedTitleTypeface(tf); // 작아졌을 때
toolbar_layout.setExpandedTitleTypeface(tf); // 커졌을 때
cs

 

 

 

따로 style을 지정하지 않고

 

자바 코드만으로 해결되었다.

 

 

예전에 폰트를 넣던 방식인

- app/src/main 폴더에

- asstes 폴더를 만들어 주고

- 그 안에 fonts 폴더를 만들어서

- 폰트 파일을 집어 넣고

 

저렇게 불러와서 설정하면 

 

폰트가 정상적으로 적용된다.

 

 

온갖 삽질을 다 해봤지만

예전 방식으로 되다니..

 

 

assets 폴더에 폰트를 넣는 방식은 예전 방식인데

최근에는 대부분 res 폴더에 font 폴더를 만들어서 쓴다.

 

그래서 assets 폴더에 폰트 파일을 중복해서 넣을 수 밖에 없었다.

 

이 부분에 대해서는 또 해결책을 찾아봐야겠다.

댓글