2015-10-27 14 views
23

PodsumowanieCall wymaga poziom API 23 'błędu, ale getForeground() istnieje w FrameLayout z API 1

Wreszcie okazało się, że problem powiązany, setForeground() nieprawidłowo oznaczony jako wymagające API 23 na ViewGroups rozciągających FrameLayout.

Issue 189041: setForeground() incorrectly flagged as requiring API 23 (NewApi) for ViewGroups extending FrameLayout

Jeśli nie rozciągają FrameLayout, dokumentacja jest zły i wymaga API 23.

Issue 186273: View.setForeground wrong API level

Updated pytanie

Oznaczono jako duplicated of Can't use setForeground method on ImageView przez Commonsware i odpowiedział mu:

To błąd dokumentacji. setForeground() istniał na FrameLayout z poziomu API 1; jest tylko na widoku od poziomu API 23.

W moim przypadku błąd w dokumentacji nie został wykryty przez inspekcję w widelcu, ale robi to w ramach projektu integracji, nie rozumiem tego, tak czy inaczej, odpowiada na moje pierwsze pytanie.

Ale to nie ten sam przypadek, kod ten już rozszerza Framelayout i przy użyciu tej metody nie jest to ImageView, więc przypuszczam, że metoda została usunięta w interfejsie API 23. Nie pojawia się teraz w odnośniku.

Aktualizacja: I dodać diff report dla FrameLayout:

enter image description here

New pytanie

więc moje pytanie zmiany sposobu korzystania z metody w poprzednich wersjach, a dlaczego pojawia się błąd inspekcji wybiórczo?

Jeśli dodać redundantny obsady, komunikat o błędzie zniknie:

((FrameLayout) layout).getForeground() 

Ale to dostęp do metody View że teraz nie jest obsługiwana.

więc przypuszczam kierowania poprzednią API byłoby usunąć komunikatu o błędzie, ale chciałbym docenić rozwiązanie do korzystania z tej metody Framelayout lub wskazówkę, aby rozwiązać ten problem w moim przypadku:

ANDROID_COMPILE_SDK_VERSION=23 
ANDROID_BUILD_TOOLS_VERSION=23.0.1 
ANDROID_DEFAULT_MIN_SDK_VERSION=19 
ANDROID_DEFAULT_TARGET_SDK_VERSION=23 

obejścia

W skrócie, jako obejście, zmieniłem typ na FrameLayout bezpośrednio, więc przestały istnieć ostrzeżenia o interfejsie API i przesyłaniu, a ja przetestowałem działanie na urządzeniu z Androidem 4.4.4 i debugowaniu, myślałem, że to się zawiesi, w każdym razie jest używane tylko w jednej animacji, a poprawię/zastąpię ją w przyszłości.

początkowe pytanie

I rozwidlone i dostosowane próbkę Google android-topeka i android-studio pokazuje błąd, że nie rozumie o poziomie API wymaganych do stosowania metody getForeground() klasy View w android.view opakowanie:

połączeń wymaga poziom API 23 (obecny min z 19): android.view.View # getForeground

W reference znaki Sposób dodany w poziomie API 1, a dokumentacja (Control+Q) pokazuje ten sam:

Doc showing API level 1 method

Ale Calling new methods on older versions inspection pokazuje błąd, który wymagany jest poziom API 23:

Error message about API 23 required

znalazłem similar question, błąd w tym przypadku, ale myślę, że to nie jest błąd z powodu oryginalnego widelca nie pokazać tego błędu wiadomość.

Spróbuję wykryć pierwszy raz, kiedy pojawi się wiadomość, ale zrobiłem wiele zmian, więc każda wskazówka byłaby doceniona, dziękuję.

Odpowiedz

18

Wreszcie znalazłem powiązany problem, setForeground() nieprawidłowo oznaczony jako wymagający API 23 dla ViewGroups przedłużających FrameLayout.

Issue 189041: setForeground() incorrectly flagged as requiring API 23 (NewApi) for ViewGroups extending FrameLayout

Jeśli nie rozciągają FrameLayout, dokumentacja jest zły i API 23 jest naprawdę konieczne.

Issue 186273: View.setForeground wrong API level

+0

Więc pan dowiedzieć się, w jaki sposób możemy uzyskać lub ustawić nową wiedzę API dla urządzeń poniżej 23? –

+1

Jeśli rozszerzasz FrameLayout, możesz użyć redundantnego rzutu lub zmienić typ na FrameLayout, aby uniknąć błędów w dokumentacji. W przeciwnym razie nie jest to możliwe, ale być może następne obejście jest dla ciebie przydatne http://stackoverflow.com/a/33201753/1009132 – albodelu

+0

Dzięki za pomoc. –

Powiązane problemy