본문 바로가기
Android/Exceptions

TextView 에서의 InflateException 발생

by featherwing 2019. 4. 2.
반응형

이번 업데이트에서 TextView에 fontFamily 속성 부여후 앱 배포를 했는데,

 

android:fontFamily="sans-serif-light"

 

상기와 같이 xml에 직접적으로 폰트속성을 설정해준 곳에서는 발생하지 않고

 

android:theme="@style/textTheme"

 

    <style name="textTheme">
        <item name="android:textSize">28dp</item>
        <item name="android:fontFamily">sans_serif_light</item>
    </style>

와 같이 테마로 설정해준 곳에서만 발생하는데,

 

일부 기기에서 InflateException이 계속 발생하여 원인을 계속 찾았습니다.

 

그런데 이것이 해당되는 모든 레이아웃에서 발생하는것이 아니고,

 

일부 특정 레이아웃에서만 계속 발생하였기 때문에 원인이 무엇인지 알 수 가 없었습니다.

 

찾아보니, 해당이슈는 api 버전 26 이하의 기기에서 간헐적으로 발생하는 OS 자체의 버그이며,

 

안드로이드 O 버전 에서는 픽스되었다고 합니다.

 

즉, O 이하의 기기에서는 발생할 수도, 하지 않을수도 있다는 소리가 되기 때문에... 이를 픽스해주어야 합니다.

 

테스트시에도 제가 가진 실제기기에서는 그 어떤기기에서도 발생하지 않았고 AVD에서도 발생하지 않았으나

 

Crash report에는 꾸준히 보고되고 있었습니다.

 

(실제 리포트에 보고되는 기기의 버전 모두 O 이하의 버전이었으며  

실제 테스트용 기기는 최저버전이 O, AVD도 O 이하의 버전은 만들어 놓지 않았습니다.)

 

해결방법은 아래와 같습니다.

 

보통 xml 속성을 설정할때 아래와 같이 설정할때는 문제가 발생하지 않지만

android:fontFamily="sans-serif-light"

 

아래와 같이 속성을 묶어서 테마로 적용할때는

android:theme="@style/textTheme"
    <style name="textTheme">
        <item name="android:textSize">28dp</item>
        <item name="android:fontFamily">sans_serif_light</item>
    </style>

이렇게 적용하게 되는데, 이때 InflateException이 발생하게 됩니다.

 

 

이 다음과 같이 한단계 더 거쳐서 부여해야, inflateExeption을 피할수 있습니다.

 

android:theme="@style/textTheme"
 <style name="textTheme">
    <item name="android:textSize">28dp</item>
    <item name="android:fontFamily">@string/sans_serif_light</item>
</style>
<string name="sans_serif_light" untranslateable="true">sans-serif-light</string>

 

 

저는 그냥.. xml 속성을 하나하나 설정하는것으로 해결 해 주었습니다.

반응형

댓글