Ошибка «Вызов требует уровня API 23», но getForeground() существует в FrameLayout из API 1

Сводка

Наконец, я обнаружил связанную с этим проблему: setForeground() неправильно помечен как требующий API 23 для расширений ViewGroups FrameLayout.

Проблема 189041: setForeground() неправильно помечен как требующий API 23 (NewApi) для ViewGroups. расширение FrameLayout

Если вы не расширяете FrameLayout, документация неверна и требуется API 23.

Проблема 186273: View.setForeground неправильный уровень API

Обновленный вопрос

Отмечен как дублированный Commonsware "Невозможно использовать метод setForeground в ImageView" и ответил им:

Это ошибка документации. setForeground() существовал в FrameLayout с уровня API 1; это только в представлении с уровня API 23.

В моем случае ошибка документации не обнаруживается при проверке в форке, а обнаруживается в проекте интеграции, во всяком случае, я этого не понимаю, это отвечает на мой первоначальный вопрос.

Но это не тот случай, этот код уже расширяет Framelayout и использует этот метод, это не ImageView, поэтому я полагаю, что этот метод был удален в API 23. Теперь он не отображается в справочнике.

Обновление: добавлен отчет о различиях для Макет кадра:

введите описание изображения здесь

Новый вопрос

Итак, мой вопрос меняется на то, как использовать метод в предыдущих версиях, и почему ошибка проверки появляется выборочно?

Если я добавлю избыточное приведение, сообщение об ошибке исчезнет:

((FrameLayout) layout).getForeground()

Но он обращается к методу View, который сейчас не поддерживается.

Поэтому я полагаю, что при выборе предыдущего API сообщение об ошибке будет удалено, но я был бы признателен за решение использовать этот метод Framelayout или подсказку для решения проблемы в моем случае:

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

Временное решение

Короче говоря, в качестве обходного пути я изменил тип на FrameLayout напрямую, поэтому предупреждения об API и кастинге исчезли, и я протестировал его работу на устройстве Android 4.4.4 и отладке, я думал, что это приведет к сбою, все равно он используется только в одном анимация, и я исправлю/заменю ее в будущем.

Исходный вопрос

Я развил и настроил образец Google android-topeka, а android-studio показывает ошибку, которую я не понимаю об уровне API, необходимом для использования метода getForeground() класса View в android.view пакет:

Для вызова требуется уровень API 23 (текущий минимум 19): android.view.View#getForeground

ссылка помечает метод как добавленный на уровне API 1. , и документация (Control+Q) показывает то же самое:

Документ, показывающий метод API уровня 1

Но Calling new methods on older versions inspection показывает ошибку, что требуется уровень API 23:

Сообщение об ошибке о необходимости API 23

Я нашел похожий вопрос, ошибку в этом случае, но я думаю, что это не ошибка, потому что исходная вилка не показывает это сообщение об ошибке.

Я попытаюсь обнаружить первое появление сообщения, но я сделал много изменений, поэтому любая подсказка будет оценена, спасибо.


person albodelu    schedule 27.10.2015    source источник


Ответы (1)


Наконец, я обнаружил связанную с этим проблему: setForeground() неправильно помечен как требующий API 23 для расширений ViewGroups FrameLayout.

Проблема 189041: setForeground() неправильно помечен как требующий API 23 (NewApi) для ViewGroups, расширяющего FrameLayout

Если вы не расширяете FrameLayout, документация неверна и действительно требуется API 23.

Проблема 186273: View.setForeground неверный уровень API

person albodelu    schedule 28.10.2015
comment
Итак, вы выяснили, как мы можем получить или установить передний план для устройств ниже API 23? - person Rohan Arora; 16.04.2016
comment
Если вы расширяете FrameLayout, вы можете использовать избыточное приведение или изменить тип на FrameLayout, чтобы избежать ошибки документации. В противном случае это невозможно, но, возможно, вам будет полезен следующий обходной путь stackoverflow.com/a/33201753/1009132 - person albodelu; 17.04.2016
comment
Спасибо за помощь. - person Rohan Arora; 17.04.2016
comment
проверьте мой ответ здесь в качестве обходного пути - person blueware; 27.02.2019
comment
Спасибо, хорошие, связанные ответы здесь - person albodelu; 06.01.2020