Więc mój SDK przechodzi z 15 do 21 i kiedy dzwonię setBackgroundDrawable()
, Android Studio mówi mi, że jest przestarzały.
Pomyślałem o obejściu tego za pomocą:
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.img_wstat_tstorm));
} else {
layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
}
Ale potem pojawia się błąd w „setBackground ()”.
Jak więc sobie z tym poradzisz?
Odpowiedzi:
To ciekawy temat. Sposób, w jaki to robisz, jest najwyraźniej poprawny. W rzeczywistości jest to tylko zmiana decyzji dotyczącej nazewnictwa. Jak wskazuje ta odpowiedź ,
setBackground()
po prostu dzwonisetBackgroundDrawable()
:public void setBackground(Drawable background) { //noinspection deprecation setBackgroundDrawable(background); } @Deprecated public void setBackgroundDrawable(Drawable background) { ... }
Możesz zobaczyć ten wątek, aby uzyskać więcej informacji na ten temat.
źródło
setBackground()
to nie zadziała dla wersji przed API16, alternatywą może byćsetBackgroundResource
może możesz spróbować następujących rzeczy:
setBackgroundResource(R.drawable.img_wstat_tstorm);
źródło
To zabawne, ponieważ ta metoda jest przestarzała, ale jeśli spojrzysz na kod źródłowy Androida, zobaczysz to:
/** * Set the background to a given Drawable, or remove the background. If the * background has padding, this View's padding is set to the background's * padding. However, when a background is removed, this View's padding isn't * touched. If setting the padding is desired, please use * {@link #setPadding(int, int, int, int)}. * * @param background The Drawable to use as the background, or null to remove the * background */ public void setBackground(Drawable background) { //noinspection deprecation setBackgroundDrawable(background); }
źródło
Stan na 15 sierpnia 2018
Skorzystaj z bibliotek wsparcia
Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null); ViewCompat.setBackground(layout, drawable);
źródło
Otrzymujesz błąd, ponieważ getResources (). GetDrawable () przyjmuje jako argument id (int), a nie drawable. Spróbuj tego:
layout.setBackground(getResources().getDrawable(R.id.img_wstat_tstorm));
źródło
Użyj tego:
myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
źródło
//Java view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg)) //Kotlin view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
źródło
W moim przypadku jest to poprawne Rozwiąż ten problem
imageView.setBackgroundResource(images[productItem.getPosition()]);
źródło
Stan na 23 listopada 2018 r
Kotlin:
Jeśli dołączysz parametr Theme.
źródło
Używam minSdkVersion 16 i targetSdkVersion 23 Poniższe działa dla mnie, używa ContextCompat.getDrawable (kontekst, R.drawable.drawable);
Zamiast używać:
layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
Raczej użyj:
layout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.img_wstat_tstorm));
getActivity()
jest używany we fragmencie, jeśli dzwonisz z aktywności usethis
źródło
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem)); getSupportActionBar().setBackgroundDrawable(background);
źródło