“调用需要API级别23”错误,但是来自API 1的FrameLayout上存在getForeground()

问题描述 投票:27回答:1

摘要

最后,我发现相关问题,setForeground()错误地标记为需要在扩展FrameLayout的ViewGroups上使用API​​ 23。

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

如果您没有扩展FrameLayout,那么文档是错误的,需要API 23。

Issue 186273: View.setForeground wrong API level

更新的问题

被Commonsware标记为duplicated of Can't use setForeground method on ImageView并由他回答:

这是一个文档错误。 setForeground()存在于API Level 1的FrameLayout上;它仅适用于API级别23的View。

在我的情况下,fork中的检查没有检测到文档错误,但在集成项目中检测到它,我不明白,无论如何,这回答了我的初始问题。

但这不是同一个案例,这个代码已经扩展了Framelayout并使用这个方法,它不是ImageView,所以我想这个方法已经在API 23中删除了。它现在没有出现在引用中。

更新:我为FrameLayout添加了一个diff report

enter image description here

新问题

所以我的问题改变了如何在以前的版本中使用该方法,为什么有选择地出现检查错误?

如果我添加冗余强制转换,则错误消息将消失:

((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显示了一个错误,我不了解使用getForeground()包中类View的方法android.view所需的API级别:

调用需要API级别23(当前最小值为19):android.view.View#getForeground

reference标记了API级别1中添加的方法,文档(Control+Q)显示相同:

Doc showing API level 1 method

Calling new methods on older versions inspection显示需要API级别23的错误:

Error message about API 23 required

我发现了一个similar question,在这种情况下的一个错误,但我认为这不是一个错误,因为原来的fork没有显示此错误消息。

我将尝试检测消息第一次出现,但我做了很多更改,所以任何线索都会受到赞赏,谢谢。

java android android-studio android-framelayout android-api-levels
1个回答
20
投票

最后我发现了相关的问题,setForeground()错误地标记为需要API 23来扩展FrameLayout的ViewGroups。

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

如果您没有扩展FrameLayout,那么文档是错误的,并且确实需要API 23。

Issue 186273: View.setForeground wrong API level

© www.soinside.com 2019 - 2024. All rights reserved.