10
votes

Comment définir un bitmap sur fond pour une API Android 10-18?

Ce que j'ai est:

manifeste: xxx

source: xxx

partout où j'ai parcouru cela est l'accepté, suggéré: xxx

mais il est obsolète dans API 18. Je suis terrorisé avec des bugs-cadres et des documentations de Miss au niveau du système d'exploitation. Je veux respecter ce qu'ils disent et en cas de crash ", ce n'est pas ma faute"

Je ne peux même pas utiliser le nouveau bitmapDrawable (bitmap) et j'ai besoin < Code> Nouveau bitmapDrawable (getactivité (). getResources (), bitmap) à la place. Si je change ma méthode de manière recommandée: Setbackground (nouveau bitmapDrawable (getActivity (). GetResources (), bitmap));

Ça marquera comme une erreur avec le message: < / p>

Appel requis Niveau d'API 16 (courant actuel est 10): android.widget.relatelativelayout # setbackground

En tant que solution, je pouvais vérifier quelle version exécute l'utilisateur et faire un if-else que je vais avoir un code avec si (isandroidversion10 ()) autre si () ... < / code>

une solution acceptable de solution?

Si je m'échappe des avertissements de dépréciation via la réflexion, je aura toujours la responsabilité en cas de crash, car j'ai libéré le code avec une méthode obsolète ! -Juste la façon dont j'appelle est différent.

Si j'ignore cette peluche, il ne s'échappera à une API de version basse, testée.

OFC, je veux soutenir API 10, Vous ne pouvez donc pas accepter la plupart des réponses de ici


0 commentaires

4 Réponses :


20
votes

C'était rapide, je l'ai eu de Voici une solution acceptable xxx

homme ... Un simple parc de recul () ...

Google a commencé à copier des éléments non fonctionnels de iOS (rotation, pushmodal est très différent dans 4.3,5,6) horrible pour développer la version multi-version


0 commentaires

1
votes

Juste parce que quelque chose est obsolète ne signifie pas que cela ne fonctionne pas. De Voir source , la définition de setbackground code> est (à partir de la dernière version de Android):

public void setBackground(Drawable background) {
    //noinspection deprecation
    setBackgroundDrawable(background);
}


1 commentaires

+1, j'ai vu cela dans leur code source. Le problème est que lorsque l'application s'écrasera pour une raison quelconque, lorsque je ne peux pas démontrer clairement, c'est une erreur de l'utilisateur ou un bogue OS. Que mon instant je suis coupable parce qu'il est visible instantané: j'ai utilisé une méthode obsolète ... ou pouvez-vous expliquer à mes utilisateurs, à des clients "simplement parce que quelque chose est obsolète ne signifie pas que cela ne fonctionne pas", quand ils ont un crash? :)



0
votes

Un peu en retard à cette fête, mais mon ami, je pense que les raisons de votre crash sont à la baisse de l'exception de la méthode de mise à niveau ... Assurez-vous que vous chargez de manière efficace vos fosses bitmaps avant de les définir sur un arrière-plan. Cela pourrait aider ici


0 commentaires

0
votes

Si vous souhaitez éviter la chaudière postée dans la réponse acceptée, essayez ceci:

public static void setBitmapCompat(View view, Bitmap bitmap) {
    BitmapDrawable bd = new BitmapDrawable(view.getContext().getResources(), bitmap);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        view.setBackground(bd);
    } else {
        view.setBackgroundDrawable(bd);
    }
}


0 commentaires