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
'programing' 카테고리의 다른 글
두 개의 변수가 있는 "루프"? (0) | 2023.06.16 |
---|---|
ASP.NET MVC의 SSL 페이지 (0) | 2023.06.16 |
하나의 Postgre에서 여러 WITH 문을 사용하는 방법SQL 쿼리? (0) | 2023.06.16 |
vuex에서 이상한 게터.누가 나에게 이 행동을 설명해 줄 수 있습니까? (0) | 2023.06.16 |
SQL에서 동일한 쿼리에 여러 뷰를 만든 다음 이 뷰를 결합하려면 어떻게 해야 합니까? (0) | 2023.06.16 |