Bonjour,
Est-ce que quelqu'un sait comment marche cette annotation : @TargetAPI ?
J'aimerai pouvoir rendre une application compatible avec des plus vieilles APIs mais je ne sais pas comment marche cette balise.
Merci d'avance.
Bonjour,
Est-ce que quelqu'un sait comment marche cette annotation : @TargetAPI ?
J'aimerai pouvoir rendre une application compatible avec des plus vieilles APIs mais je ne sais pas comment marche cette balise.
Merci d'avance.
D'après ce que j'ai compris si tu utilises dans ton code une Classe qui n'est pas prise en charge ou incomplètement par le android:minSdkVersion défini dans ton manifest tu peux utiliser une API plus récente de cette façon la...
exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private void createAnimation() { if (animation == null) { @TargetApi(11) ObjectAnimator anim1 = ObjectAnimator.ofFloat(balls.get(0), "y", 0f, getHeight() - balls.get(0).getHeight()).setDuration(500); ObjectAnimator anim2 = anim1.clone(); anim2.setTarget(balls.get(1)); anim1.addUpdateListener(this);
Salut,
Alors plus précisément,
sur l'exemple de la fonction setAlpha de la classe View d'Android (valable depuis l'API 11).
J'aimerai que mon appli marche sur des APIs 8+.
J'ai essayé de faire ça :
là où je faisais des setAlpha "classiques",
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @TargetApi(11) public void setAlphaOfView(View v, float f) { v.setAlpha(f); }
cependant, j'ai quand même un message d'erreur - et l'appli crashe - comme quoi la fonction setAlpha d'une View est inconnue (si je lance l'appli avec un téléphone en version 2.3 (i.e. API8)).
Donc apparemment, je rentre quand même dans la fonction setAlphaOfView()... Plus d'infos?
Merci d'avance![]()
Je crois qu'il y a misunderstanding sur l'annotation TargetApi....
@TargetApi(11) indique au compilateur (Lint pour être préci) que ce qui suit n'est utilisé *que* dans le cadre d'un SDK11+, et ne doit donc pas raler parceque le code utilise une fonction de l'API 11, alors que le minSDKVersion est à 4 par exemple....
Je concois que c'est pas très clair comme explication...Je vais donc reprendre l'exemple...
Dans ton exemple, imaginons que ton minSDK soit à 8 (donc l'application supporte toutes les versions Android a partir de Gingerbread)....
Si tu compiles avec le SDK Level8, la fonction ne compilera pas du tout (erreur de compilation).
Si tu compiles avec le SDK Level11, la fonction compilera, mais LINT va mettre un warning (Utilisation API Level 11 only avec minSDK à 8)
Si tu rajoutes l'annotation @TargetApi(11), tu dis "Ok, je sais que ce code utilise l'API Level 11, mais je ne l'appelerai *que* dans ce cas là" => disparition du warning LINT.
Donc l'annotation n'empêche pas de *ne pas* appeler le code en fonction de la version installée...
Avec un minSDK à 4... c'est facile à faire de maniere logicielle:
Bon, pour du setAlpha ca ne sert à rien... j'ai déjà dis dans un autre thread, qu'il vaut mieux passer la view en View.INVISIBLE plutot que de mettre son alpha à 0...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if (android.os.Build.VERSION.SDK_INT>=11) { .. do this ... }
(attention View.INVISIBLE [la vue est juste 'hidden'] != View.GONE [la vue n'existe pas pour le calcul des places])
Ah nickel!
Merci de l'explication claire sur @TargetApi.
Et pour ce qui est du setAlpha, j'en ai besoin pour le mettre à 0.5f, mais je vais donc m'en sortir avec des :Merci beaucoup!if (android.os.Build.VERSION.SDK_INT>=11)
Partager