Então, meu SDK vai de 15 para 21 e quando ligo setBackgroundDrawable()
, o Android Studio me diz que está obsoleto.
Pensei em contornar isso usando:
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));
}
Mas então, recebo um erro em "setBackground ()".
Então, como você lidaria com isso?
Respostas:
É um assunto interessante. A maneira como você está fazendo está correta, aparentemente. Na verdade, é apenas uma mudança de decisão de nomenclatura. Como esta resposta indica,
setBackground()
apenas chamasetBackgroundDrawable()
:public void setBackground(Drawable background) { //noinspection deprecation setBackgroundDrawable(background); } @Deprecated public void setBackgroundDrawable(Drawable background) { ... }
Você pode ver este tópico para obter mais informações sobre tudo isso.
fonte
setBackground()
não funcionará para pré API16, uma alternativa poderia sersetBackgroundResource
talvez você possa tentar o seguinte:
setBackgroundResource(R.drawable.img_wstat_tstorm);
fonte
É engraçado porque esse método está obsoleto, mas se você olhar o código-fonte do Android, você encontrará o seguinte:
/** * 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); }
fonte
Correto em 15 de agosto de 2018
Use as bibliotecas de suporte
Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null); ViewCompat.setBackground(layout, drawable);
fonte
Você está recebendo um erro porque getResources (). GetDrawable () recebe um id (int) e não um drawable como argumento. Experimente isto:
layout.setBackground(getResources().getDrawable(R.id.img_wstat_tstorm));
fonte
Usa isto:
myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
fonte
//Java view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg)) //Kotlin view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
fonte
Isso está correto no meu caso Resolva este problema
imageView.setBackgroundResource(images[productItem.getPosition()]);
fonte
Correto em 23 de novembro de 2018
Kotlin:
Se você incluir o parâmetro Theme.
fonte
Estou usando uma minSdkVersion 16 e targetSdkVersion 23 O seguinte está funcionando para mim, ele usa ContextCompat.getDrawable (context, R.drawable.drawable);
Ao invés de usar:
layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
Em vez disso, use:
layout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.img_wstat_tstorm));
getActivity()
é usado em um fragmento, se chamar de um uso de atividadethis
fonte
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem)); getSupportActionBar().setBackgroundDrawable(background);
fonte