RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Est-ce la meilleure façon de le faire?
layout.setBackgroundResource(R.drawable.ready);
est correct.
Une autre façon de le faire consiste à utiliser ce qui suit:
final int sdk = Android.os.Build.VERSION.SDK_INT;
if(sdk < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready) );
} else {
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
}
Mais je pense que le problème se pose parce que vous essayez de charger de grandes images.
Here est un bon tutoriel sur le chargement de bitmaps volumineux.
UPDATE:
getDrawable (int) obsolète dans l'API niveau 22 getDrawable(int )
est maintenant obsolète dans le niveau 22 de l'API. Vous devez plutôt utiliser le code suivant de la bibliothèque de support:
ContextCompat.getDrawable(context, R.drawable.ready)
Si vous vous référez au code source de ContextCompat.getDrawable , cela vous donne quelque chose comme:
/**
* Return a drawable object associated with a particular resource ID.
* <p>
* Starting in {@link Android.os.Build.VERSION_CODES#Lollipop}, the returned
* drawable will be styled for the specified Context's theme.
*
* @param id The desired resource identifier, as generated by the aapt tool.
* This integer encodes the package, type, and resource entry.
* The value 0 is an invalid identifier.
* @return Drawable An object that can be used to draw this resource.
*/
public static final Drawable getDrawable(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 21) {
return ContextCompatApi21.getDrawable(context, id);
} else {
return context.getResources().getDrawable(id);
}
}
Plus de détails sur ContextCompat
À partir de l'API 22, vous devez utiliser la méthode getDrawable(int, Theme)
à la place de getDrawable (int).
UPDATE:
Si vous utilisez la bibliothèque de support technique v4, les éléments suivants seront suffisants pour toutes les versions.
ContextCompat.getDrawable(context, R.drawable.ready)
Vous devrez ajouter ce qui suit dans votre application build.gradle
compile 'com.Android.support:support-v4:23.0.0' # or any version above
Ou en utilisant ResourceCompat, dans n'importe quelle API comme celle ci-dessous:
import Android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
Essaye ça:
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
et pour API 16 <:
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
RelativeLayout relativeLayout; //declare this globally
maintenant, dans n'importe quelle fonction comme onCreate, onResume
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this
Vous pouvez également définir le fond de n'importe quelle image:
View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
Si vos arrière-plans se trouvent actuellement dans le dossier dessinable, essayez de déplacer les images du dossier dessinable vers le dossier drawable-nodpi de votre projet. Cela a fonctionné pour moi, semble que sinon les images sont redimensionnées par eux-mêmes ..
J'utilise les versions minSdkVersion 16 et targetSdkVersion 23.
Ce qui suit fonctionne pour moi, il utilise
ContextCompat.getDrawable(context, R.drawable.drawable);
À la place d'utiliser:
layout.setBackgroundResource(R.drawable.ready);
Plutôt utiliser:
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
getActivity()
est utilisé dans un fragment. Si vous appelez depuis une activité, utilisez this
.
if (Android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.ready));
else if(Android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop_MR1)
layout.setBackground(getResources().getDrawable(R.drawable.ready));
else
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
Utilisez butterknife pour lier la ressource extractible à une variable en l'ajoutant en haut de votre classe (avant toute méthode).
@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;
puis à l'intérieur de l'une de vos méthodes, ajoutez
layout.setBackground(background);
C'est tout ce dont vous avez besoin
À l'intérieur de l'application/res/your_xml_layout_file. Xml
essaye ça.
int res = getResources().getIdentifier("you_image", "drawable", "com.my.package");
preview = (ImageView) findViewById(R.id.preview);
preview.setBackgroundResource(res);
Essayez ce code:
Drawable thumb = ContextCompat.getDrawable(getActivity(), R.mipmap.cir_32);
mSeekBar.setThumb(thumb);
Essayer ViewCompat.setBackground(yourView , drawableBackground)