[java] Android : context.getDrawable ()의 대안

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

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

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



답변

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

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

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


답변

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

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

작동해야합니다.


답변

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

내가 사용한 것,

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

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


답변

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

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


답변

이 시도:

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


답변

“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));
}


답변

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