Pour définir l'arrière-plan:
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Est-ce la meilleure façon de le faire?
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Est-ce la meilleure façon de le faire?
Réponses:
layout.setBackgroundResource(R.drawable.ready);
est correct.
Une autre façon d'y parvenir est d'utiliser les éléments suivants:
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 produit parce que vous essayez de charger de grandes images.
Voici un bon tutoriel sur la façon de charger des bitmaps volumineux.
MISE À JOUR:
getDrawable (int) déconseillé au niveau API 22
getDrawable(int )
est désormais déconseillé au niveau API 22. 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 , il vous donne quelque chose comme ceci:
/**
* 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 getDrawable(int, Theme)
méthode au lieu de getDrawable (int).
MISE À JOUR:
Si vous utilisez la bibliothèque de support v4, les éléments suivants seront suffisants pour toutes les versions.
ContextCompat.getDrawable(context, R.drawable.ready)
Vous devrez ajouter les éléments suivants 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 ci-dessous:
import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
if(buttonBackground.equals(R.drawable.myDrawable))
où Drawable buttonBackground = myButton.getBackground();
j'obtiens cette erreur: snag.gy/weYgA.jpg
myActivity.getTheme()
de la dernière version de la méthode, au lieu du paramètre null:myView.setBackground( getResources().getDrawable(R.drawable.my_background, activity.getTheme()));
AppCompatResources.getDrawable(this.getContext(), resId)
place, Google l'a déjà implémenté dans un AppCompat*
widget / vue, par exemple:android.support.v7.widget.AppCompatCheckBox
Essaye ça:
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
et pour l'API 16 <:
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
getResources().getDrawable()
. Le bon code est layout.setBackgroundResource(R.drawable.ready);
exactement comme l'OP utilisé. Le problème vient ici de la taille du bitmap.
RelativeLayout relativeLayout; //declare this globally
maintenant, à l'intérieur de 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 l'arrière-plan de n'importe quelle image:
View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
(.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
intérieur du code
J'utilise un 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);
Utilisez plutôt:
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
getActivity()
est utilisé dans un fragment, si vous appelez depuis une activité this
.
Si vos arrière-plans se trouvent dans le dossier drawable, essayez de déplacer les images du dossier drawable vers drawable-nodpi dans votre projet. Cela a fonctionné pour moi, semble que sinon les images sont redimensionnées par eux-mêmes ..
Utilisez butterknife pour lier la ressource drawable à 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
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));
Essayez ViewCompat.setBackground(yourView, drawableBackground)
essaye ça.
int res = getResources().getIdentifier("you_image", "drawable", "com.my.package");
preview = (ImageView) findViewById(R.id.preview);
preview.setBackgroundResource(res);
setBackground(getContext().getResources().getDrawable(R.drawable.green_rounded_frame));
À l'intérieur de l'application / res / your_xml_layout_file .xml
remoteViews.setInt(R.id.btn_start,"setBackgroundResource", R.drawable.ic_button_start);