Android getResources (). getDrawable () 지원 중단 API 22
새로운 Android API 22 getResources().getDrawable()
는 이제 더 이상 사용되지 않습니다. 이제 가장 좋은 방법은 getDrawable()
.
무엇이 바뀌 었습니까?
로드하는 드로어 블의 종류에 따라이 지원 중단을 올바른 (및 향후 증명 ) 방식 으로 처리 할 수있는 몇 가지 옵션이 있습니다 .
A)는 드로어 블 과 테마 속성
ContextCompat.getDrawable(getActivity(), R.drawable.name);
활동 테마가 지시하는대로 스타일이 지정된 Drawable을 얻을 수 있습니다. 이것은 아마도 당신에게 필요한 것입니다.
B) 테마 속성이 없는 드로어 블
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
스타일이 지정되지 않은 드로어 블을 예전 방식으로 얻을 수 있습니다. 참고 : ResourcesCompat.getDrawable()
되어 있지 되지 않습니다!
EXTRA)는 드로어 블 과 테마에서 속성을 다른 테마
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
편집 : 더 자세한 설명은 주제에 대한 내 블로그 게시물 을 참조하십시오.
대신 지원 라이브러리의 다음 코드를 사용해야합니다.
ContextCompat.getDrawable(context, R.drawable.***)
이 메서드를 사용하는 것은 다음을 호출하는 것과 같습니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
API 21 부터는 지정된 화면 밀도 / 테마에 대한 특정 리소스 ID와 연결된 드로어 블 개체를 가져올 수 있으므로 getDrawable(int, Theme)
대신 메서드를 사용해야합니다 getDrawable(int)
. 더 이상 사용되지 않는 getDrawable(int)
메서드를 호출하는 것은를 호출하는 것과 같습니다 getDrawable(int, null)
.
다음 줄 바꾸기 : getResources().getDrawable(R.drawable.your_drawable)
와 ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
편집하다
ResourcesCompat
현재는 더 이상 사용되지 않습니다. 그러나 이것을 사용할 수 있습니다.
ContextCompat.getDrawable(this, R.drawable.your_drawable)
(여기 this
에 컨텍스트가 있습니다)
자세한 내용은 다음 링크를 따르십시오. ContextCompat
getResources().getDrawable()
API 레벨 22에서 더 이상 사용되지 않습니다. 이제 테마를 추가해야합니다.
getDrawable (int id, Resources.Theme 테마) (API 레벨 21에 추가됨)
다음은 예입니다.
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
다음은 이후 버전의 유효성을 검사하는 방법의 예입니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
} else {
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
당신이 사용할 수있는
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
그것은 나를위한 일이다
listView를로드하기 위해 배열의 문제를 수정 한 방법의 예일뿐입니다.
mItems = new ArrayList<ListViewItem>();
// Resources resources = getResources();
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
이 시도:
public static List<ProductActivity> getCatalog(Resources res){
if(catalog == null) {
catalog.add(new Product("Dead or Alive", res
.getDrawable(R.drawable.product_salmon),
"Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
catalog.add(new Product("Switch", res
.getDrawable(R.drawable.switchbook),
"Switch by Chip Heath and Dan Heath", 24.99));
catalog.add(new Product("Watchmen", res
.getDrawable(R.drawable.watchmen),
"Watchmen by Alan Moore and Dave Gibbons", 14.99));
}
}
EN API 레벨 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
SDK> 21 (lollipop 또는 5.0)을 타겟팅하는 경우
context.getDrawable(R.drawable.your_drawable_name)
이제 다음과 같이 구현해야합니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
//
} else {
//
}
한 줄의 코드로 충분하며 모든 것이 ContextCompat.getDrawable에 의해 처리됩니다.
ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
Build.VERSION_CODES.LOLLIPOP는 이제 BuildVersionCodes.Lollipop으로 변경되어야합니다.
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}
참고 URL : https://stackoverflow.com/questions/29041027/android-getresources-getdrawable-deprecated-api-22
'Development Tip' 카테고리의 다른 글
git에서 두 커밋 사이에 변경된 줄 수를 어떻게 계산할 수 있습니까? (0) | 2020.09.30 |
---|---|
다른 git 저장소에서 커밋을 체리로 선택할 수 있습니까? (0) | 2020.09.30 |
스레드 코드를 단위 테스트하려면 어떻게해야합니까? (0) | 2020.09.30 |
AsyncTask Android 예제 (0) | 2020.09.30 |
Java에서 배열을 집합으로 변환하는 방법 (0) | 2020.09.30 |