web-dev-qa-db-fra.com

Erreur «L'appel nécessite le niveau 23 de l'API», mais getForeground () existe sur FrameLayout à partir de l'API 1

Résumé

Enfin, j'ai trouvé le problème connexe, setForeground() incorrectement signalé comme nécessitant l'API 23 sur ViewGroups étendant FrameLayout.

Problème 189041: setForeground () est incorrectement signalé comme nécessitant l'API 23 (NewApi) pour ViewGroups étendant FrameLayout

Si vous n'étendez pas FrameLayout, la documentation est incorrecte et l'API 23 est requise.

problème 186273: niveau API incorrect pour View.setForeground

Question mise à jour

Marqué comme dupliqué de la méthode Can't use setForeground sur ImageView par Commonsware et répondu par lui:

C'est un bug de documentation. setForeground () existait sur FrameLayout à partir de l'API niveau 1; il n'est disponible que sur View à partir de l'API niveau 23.

Dans mon cas, le bug de documentation n'est pas détecté par l'inspection dans le fork mais le fait dans un projet d'intégration, je ne le comprends pas, de toute façon, cela répond à ma question initiale.

Mais ce n'est pas le même cas, ce code étend déjà un Framelayout et en utilisant cette méthode, ce n'est pas un ImageView, donc je suppose que la méthode a été supprimée dans l'API 23. Elle ne le fait pas apparaissent dans la référence maintenant.

Mise à jour: J'ajoute un rapport diff pour FrameLayout:

enter image description here

Nouvelle question

Ma question change donc sur la façon d'utiliser la méthode dans les versions précédentes et pourquoi apparaît l'erreur d'inspection de manière sélective?

Si j'ajoute une distribution redondante, le message d'erreur disparaît:

((FrameLayout) layout).getForeground()

Mais c'est l'accès à la méthode View qui n'est pas prise en charge actuellement.

Je suppose donc que le ciblage d'une API précédente supprimerait le message d'erreur, mais j'apprécierais une solution pour utiliser cette méthode Framelayout ou un indice pour résoudre le problème dans mon cas:

Android_COMPILE_SDK_VERSION=23
Android_BUILD_TOOLS_VERSION=23.0.1
Android_DEFAULT_MIN_SDK_VERSION=19
Android_DEFAULT_TARGET_SDK_VERSION=23

Solution

En bref, comme solution de contournement, j'ai changé le type en FrameLayout directement, donc les avertissements concernant l'API et le casting ont disparu, et j'ai testé que cela fonctionne sur Android 4.4.4 appareil et le débogage, je pensais que ça planterait, de toute façon il n'est utilisé que dans une animation, et je le corrigerai/le remplacerai à l'avenir.

Question initiale

J'ai bifurqué et personnalisé l'exemple Google Android-topeka , et Android-studio affiche une erreur que je ne comprends pas sur le niveau d'API requis pour utiliser la méthode getForeground() de la classe View dans le package Android.view:

L'appel nécessite le niveau API 23 (la valeur minimale actuelle est de 19): Android.view.View # getForeground

référence marque la méthode comme ajoutée au niveau 1 de l'API, et la documentation (Control+Q) Montre la même chose:

Doc showing API level 1 method

Mais le Calling new methods on older versions inspection Affiche une erreur indiquant que le niveau d'API 23 est requis:

Error message about API 23 required

J'ai trouvé un question similaire , un bug dans ce cas, mais je pense que ce n'est pas un bug car la fourche d'origine n'affiche pas ce message d'erreur.

Je vais essayer de détecter la première fois que le message apparaît, mais j'ai fait beaucoup de changements afin que tout indice soit apprécié, merci.

28
albodelu

Enfin, j'ai trouvé le problème connexe, setForeground() incorrectement signalé comme nécessitant l'API 23 pour ViewGroups étendant FrameLayout.

Problème 189041: setForeground () incorrectement marqué comme nécessitant l'API 23 (NewApi) pour ViewGroups étendant FrameLayout

Si vous n'étendez pas FrameLayout, la documentation est incorrecte et l'API 23 est vraiment requise.

Problème 186273: niveau API incorrect pour View.setForeground

20
albodelu