Android : context.getDrawable ()의 대안


84

나는 사용했다 context.getDrawable()내 프로젝트에서 다음과 같이 했습니다.

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

하지만 Eclipse는 Minimum API level of 21. 이것은 빠른 Google 검색 후에 내 앱이에서만 사용할 수 있음을 의미 Android 5.0합니다. 모든 기기가이 버전의 Android를 사용하는 것은 아니기 때문에 context.getDrawable().

답변:


201

SDK 22 문서에 따르면 이전에 허용 된 메서드는 더 이상 사용되지 않습니다.

android.os.Build.VERSION_CODES # JELLY_BEAN 이전에는 여기에 전달 된 리소스 ID가 다른 드로어 블 리소스의 별칭 인 경우이 함수가 최종 구성 밀도를 올바르게 검색하지 못했습니다. 즉, 별칭 리소스의 밀도 구성이 실제 리소스와 다른 경우 반환 된 Drawable의 밀도가 잘못되어 스케일링이 잘못 될 수 있습니다.

이 답변 에서 지적했듯이 더 나은 솔루션은 ContextCompat 을 사용하는 것입니다 . ContextCompat.getDrawable(context, R.drawable.***)


1
나는 더 관련성이 있기 때문에 지금이 대답을 수락했습니다. :)
Bram

26

getResources()컨텍스트 뒤에 추가해보십시오 .

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

작동해야합니다.


4
에 Resources.getDrawables는 Context.getDrawable 찬성 사용되지 않습니다
조 Bowbeer을

12

지금은 더 이상 사용되지 않는 getDrawable () 메서드를 참조하려는 동일한 상황이 발생했습니다.

내가 사용한 것,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

이것이 당신을 도울 수 있기를 바랍니다


9

나는 전에 비슷한 문제가 있었다. 이렇게 해보 셨나요?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

더 이상 사용되지 않습니다.
Taslim Oseni

2

이 시도:

AppCompatResources.getDrawable(context, R.drawable.*)

1

"getDrawable (id, this.getTheme ())"를 사용해야합니다. 이 메서드는 지금까지 사용되지 않습니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}

1

ContextCompact.getDrawable (Context context, int resID) 사용에 동의합니다. 그것은 나를 위해 일했으며 내 앱은 API 19를 대상으로합니다.


1

드로어 블 (Kotlin)을 사용하지 않고 직접 리소스를 설정할 수도 있습니다.

btn.setImageResource(R.drawable.ic_XXX)

1

Kotlin 프로그래머를위한 솔루션은 다음과 같습니다.

val greenProgressbar = context!!.getDrawable(R.drawable.custom_progressbargreen)

또는 (API 22에서)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.