새로운 Android API 22 getResources().getDrawable()
에서는 더 이상 사용되지 않습니다. 이제 가장 좋은 방법은을 사용하는 것 getDrawable()
입니다.
무엇이 바뀌 었습니까?
Resources#getDrawable(int)
Resources#getColor(int)
새로운 Android API 22 getResources().getDrawable()
에서는 더 이상 사용되지 않습니다. 이제 가장 좋은 방법은을 사용하는 것 getDrawable()
입니다.
무엇이 바뀌 었습니까?
Resources#getDrawable(int)
Resources#getColor(int)
답변:
이 중단 권리 (및 처리하기 위해 몇 가지 옵션을 가지고 미래의 증거 ) 방법, 종류 당김의있는로드중인 따라 :
A)는 드로어 블 과 테마 속성
ContextCompat.getDrawable(getActivity(), R.drawable.name);
활동 테마가 지시하는대로 스타일 드로어 블을 얻을 수 있습니다. 이것은 아마도 당신이 필요로하는 것입니다.
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)
.
getDrawable (int id)
방법을 의미한다고 생각합니다 Context
. 이것은 getResources().getDrawable(id, getTheme());
새로운 API와 동일 하며 또한 사용합니다.
getDrawable(int, Resources.Theme)
.
이 줄을 바꾸십시오 :
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));
}
Build.VERSION_CODES.LOLLIPOP is API 21
그래서이 안 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
나 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? 신경 쓰지 마. 아래에서 "이 방법은 API 21에 추가되었지만 API 22까지는 더 이상 사용되지 않습니다. :)"
당신이 사용할 수있는
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));
}
}
getDrawable (int drawable) 은 API 레벨 22에서 더 이상 사용되지 않습니다 . 참조를 위해이 링크 를 참조하십시오 .
이제이 문제를 해결하려면 다음과 같이 id와 함께 새로운 생성자를 전달해야합니다.
getDrawable(int id, Resources.Theme theme)
솔루션의 경우 다음과 같이하십시오 :-
자바에서 :-
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)
이것이 도움이되기를 바랍니다. 감사합니다.
en api 레벨 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
이 스레드의 제안을 적용한 후에도 여전히이 문제를 해결하려는 일부 사람들은 (이전과 같았습니다) Application 클래스에 onCreate () 메소드 에이 줄을 추가하십시오
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
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);
}
BuildVersionCodes
자 마린에 클래스 별?
getDrawable (int id)
클래스 의 메소드Resources
는 더 이상 사용되지 않습니다. 이제getDrawable (int id, Resources.Theme theme)
새로운 테마 매개 변수와 함께 메소드 를 사용해야합니다 .