programing

Android getResources().getDrawable()이 더 이상 사용되지 않는 API 22

skycolor 2023. 6. 16. 21:35
반응형

Android getResources().getDrawable()이 더 이상 사용되지 않는 API 22

22를 하여 Android API 22를 사용합니다.getResources().getDrawable()이제 더 이상 사용되지 않습니다.은 오직 이제가좋방은법은만 입니다.getDrawable().

뭐가 달라졌나요?

로드하는 그리기 가능한 유형에 따라 이 권장 사항을 올바른 방식(및 향후 증명)으로 처리할 수 있는 몇 가지 옵션이 있습니다.


테마 속성이 있는 그리기 가능한 항목

ContextCompat.getDrawable(getActivity(), R.drawable.name);

활동 테마가 지시하는 대로 스타일이 지정된 그리기 가능한 그림을 얻을 수 있습니다.이것이 아마도 당신이 필요로 하는 것일 것입니다.


테마 속성이 없는 그림 그리기 가능

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

21 으로 API 21을 .getDrawable(int, Theme) 대신 getDrawable(int)지정된 화면 밀도/테마에 대해 특정 리소스 ID와 연결된 그리기 가능한 개체를 가져올 수 있기 때문입니다.되지 않는 사용지않는호출자로 전화하기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컨텍스트임)

자세한 내용은 다음 링크를 참조하십시오.ContextComp

getResources().getDrawable() API 레벨 22에서 더 이상 사용되지 않습니다.이제 테마를 추가해야 합니다.

그리기 가능(ID, 리소스)을 가져옵니다.테마)(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(getActivity(), R.drawable.drawable_resource_name);

코틀린에서는 확장자를 사용할 수 있습니다.

fun Context.getMyDrawable(id : Int) : Drawable?{

    return  ContextCompat.getDrawable(this, id)
}

그럼 다음과 같이 사용합니다.

context.getMyDrawable(R.drawable.my_icon)

getDrawable(인트드로잉 가능)은 API 레벨 22에서 더 이상 사용되지 않습니다.참고로 이 링크를 참조하십시오.

이제 이 문제를 해결하려면 다음과 같은 ID를 가진 새 생성자를 전달해야 합니다.

getDrawable(int id, Resources.Theme theme)

솔루션의 경우 다음과 같이 하십시오.

Java의 경우:-

ContextCompat.getDrawable(getActivity(), R.drawable.name);   

또는

 imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));

코틀린에서 :-

rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)

또는

 rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)

이것이 당신에게 도움이 되기를 바랍니다.감사해요.

사용할 수 있습니다.

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

SDK > 21(롤리팝 또는 5.0)을 대상으로 하는 경우,

context.getDrawable(R.drawable.your_drawable_name)

문서 참조

enapi 레벨 14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));

이제 다음과 같이 구현해야 합니다.

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
        //
    } else {
        //
    }

코드 한 줄만 따라가면 모든 것이 ContextCompat.getDrawable로 처리됩니다.

ContextCompat.getDrawable(this, R.drawable.your_drawable_file)

이 스레드의 제안을 적용한 후에도 여전히 이 문제를 해결해야 하는 일부 사람들을 위해(나는 예전에 그런 스레드였다) Create() 메서드의 응용 프로그램 클래스에 이 행을 추가합니다.

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

여기와 여기에서 제안하는 것처럼 특히 메뉴 항목 등을 다룰 때 리소스에서 벡터에 액세스하는 데 필요한 경우가 있습니다.

SDK 23 이상을 대상으로 다른 앱에서 인출 가능한 것이 필요한 경우

PackageManager manager = getApplicationContext().getPackageManager();
Resources resources = null;
try {
    resources = manager.getResourcesForApplication("com.anyapp");
    } 
catch (PackageManager.NameNotFoundException e) {
   e.printStackTrace();
   }
assert resources != null;
Drawable notiIcon = ResourcesCompat.getDrawable(resources, current.iconId/* drawable resource id */, null);

이제 Build.VERSION_CODES.LOLIPOP을 BuildVersionCodes로 변경해야 합니다.롤리팝(예:

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

반응형