.getResource()

정승훈·2022년 10월 28일
1
post-thumbnail

개발을 하다보면 액티비티나 프래그먼트에서 내부 리소스 파일에 접근해야 하는 경우가 있다.
내가 데이터바인딩을 몰랐을 때는 무지성으로 액티비티에 모든 코드를 때려박았는데 그럴때는 당연히 이런 방식으로 리소스에 접근을 했다.

근데 이렇게 하면 컴파일러가 찡찡댄다

해석해보면
1) ResourcesCompat.getDrawable()을 사용해라.
2) getDrawable(Int) : Drawable은 추천되지 않는다

왜 그럴까요?

안드로이드 API 22 부터 getDrawable(), getColor() 함수는 Deprecated 되었기 때문입니다

Deprecated?


그렇다 더 이상 사용되지 않는 함수나 API를 우리는 Deprecated API 라고 부른다

특징

  • 공식적으로 지원이 중단된 것이지 사용이 불가능한것은 아님
  • 대체 가능한 API를 추천해줌

그럼 어떻게 해요??

어떻게 하긴 뭘 어떻게 하냐

다른 함수를 찾아야지

그래서 한 번 찾아봤다

간단히 정리한 표를 보자

테마 지정

resource에 접근하며 해당 레이아웃의 테마를 지정할 수 있는가?

API>=21

안드로이드 API 레벨 21 이상에서 작동하는가?

API<21

안드로이드 API 레벨 21 미만에서 작동하는가?

벡터

벡터 이미지를 가져올 수 있는가?

이렇게 쓸 수 있다

내 생각엔 말이지

4가지 모두 장점이 있다
API 레벨을 분리할 필요 없이 resource에 접근하고 싶다면 AppCompatResource나 VectorDrawableCompat을 사용하면 된다.
마찬가지로 theme 지정도 하고 싶다면 ResourcesCompat이나 VectorDrawableCompat 을 사용하면 된다.

결론!

  • 4가지 함수의 장단점을 잘 생각해서 알잘딱으로 사용하자
  • Deprecated 된 API 는 지원이 종료된것이지 사용 불가능한것이 아니다
  • 대부분 Deprecated API는 대체 가능한 API를 제공한다

1개의 댓글

comment-user-thumbnail
2022년 11월 3일

너무 유익한 정보네요~

답글 달기