おそらくSDK 16+でビルドしていて、メソッドがそこにあるため、ビルド時にエラーは発生しません。ただし、apk を 2.1 Android フォンにインストールすると、MethodNotFound
例外がスローされます。したがって、将来的には常に最小ターゲットデバイスにapkをインストールして、何かを忘れていないかどうかを確認してください. Min-Target は基本的に、PLAY ストア (および lint 警告など) のフィルターのみです。
AFAIK からimageView.setBackground(...)
への移行imageView.setBackgroundDrawable(...)
は、API スタイルの設計上の選択に過ぎませんでした。したがって、Android SDK 18 のソースを見ると、次のように表示されます。
/**
* Set the background to a given Drawable, or remove the background. If the
* background has padding, this View's padding is set to the background's
* padding. However, when a background is removed, this View's padding isn't
* touched. If setting the padding is desired, please use
* {@link #setPadding(int, int, int, int)}.
*
* @param background The Drawable to use as the background, or null to remove the
* background
*/
public void setBackground(Drawable background) {
//noinspection deprecation
setBackgroundDrawable(background);
}
したがって、今のところ、どちらを使用してもまったく関係ありませんが、もちろんこれは変更される可能性があります (ただし、SDK 16 より前に行われたほぼすべてのアプリが機能しなくなるため、将来変更される可能性は低いです) - 基本的にsetBackground()
SDK でも使用できます18歳以上
したがって、将来性はあるが醜い側になりたい場合は、他の回答で示されているバージョンフォークを使用できます
if(Build.VERSION.SDK_INT >= 16) {
//new code
} else {
//deprecated code
}
1 つだけ、これは個人的なスタイルの好みかもしれませんが、次のような注釈で Lint 警告を抑制しません。
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
後でリファクタリング/より高いSDKに移動したい場合、これらの醜いスイッチを簡単に取り除くことができるので、警告を保持するのが好きです.
更新:
Google の v4 サポート ライブラリには、sdk ボイラー プレート コードのヘルパー クラスが含まれています。この場合、次を使用します。
ViewCompat.setBackground(view,drawable);
これにより、SDK チェックが処理されます。