web-dev-qa-db-ja.com

「呼び出しにはAPIレベル23が必要です」エラーが、API 1からFrameLayoutにgetForeground()が存在します

まとめ

最後に、関連する問題を見つけました。setForeground()は、FrameLayoutを拡張するViewGroupsでAPI 23を必要とするフラグが誤って付けられています。

問題189041:setForeground()は、FrameLayout を拡張するViewGroupsにAPI 23(NewApi)を必要とするフラグが誤って付けられました

FrameLayoutを拡張しない場合、ドキュメントが間違っており、API 23が必要です。

問題186273:View.setForegroundの誤ったAPIレベル

更新された質問

Commonswareによって duplicated of Ca n't use setForeground method on Imageview としてマークされ、彼によって回答されました:

これはドキュメントのバグです。 setForeground()はAPIレベル1からFrameLayoutに存在しました。 APIレベル23の時点でのみ表示されます。

私の場合、ドキュメントのバグはフォークの検査では検出されませんが、統合プロジェクトでは検出されます。理解できません。とにかく、これは私の最初の質問の答えです。

しかし、それは同じケースではありません。このコードはすでに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デバイスとデバッグで動作することをテストしました。とにかく、それは1つのアニメーションでのみ使用され、将来修正または交換する予定です。

最初の質問

Googleサンプル Android-topeka をフォークしてカスタマイズしましたが、Android-studioに、メソッドgetForeground()を使用するために必要なAPIレベルについて理解できないエラーが表示されますAndroid.viewパッケージのViewクラス:

呼び出しには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

同様の質問 、その場合のバグを見つけましたが、元のフォークにはこのエラーメッセージが表示されないため、これはバグではないと思います。

メッセージが最初に表示されたときに検出を試みますが、多くの変更を加えたので、手がかりをいただければ幸いです。

28
albodelu

最後に、関連する問題を見つけました。setForeground()は、FrameLayoutを拡張するViewGroupsにAPI 23を必要とするという誤ったフラグを立てました。

問題189041:setForeground()は、FrameLayoutを拡張するViewGroupsにAPI 23(NewApi)を必要とするフラグが誤って付けられます

FrameLayoutを拡張しない場合は、ドキュメントが間違っており、API 23が本当に必要です。

問題186273:View.setForegroundの誤ったAPIレベル

20
albodelu