Development Tip

Android getResources (). getDrawable () 지원 중단 API 22

yourdevel 2020. 9. 30. 11:35
반응형

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

반응형