0

私のアプリケーションは、Android バージョン 2.3.3 (SDK 10) 以降をサポートしています。私は簡単なコードを持っています:

private void setBackgroundToView(View view, Drawable drawable) {
    if (Build.VERSION.SDK_INT >= 16) {
        view.setBackground(drawable);
    } else {
        view.setBackgroundDrawable(drawable);
    }
}

Android 4.0.3 を搭載した GT-I9100G では、sdk バージョン 15 がログに続くことがわかりました。

I/dalvikvm(13683): Could not find method android.view.View.setBackground, referenced from method %some_package%.setBackgroundToView

Build.VERSION.SDK_INT15 以上の値を持つことを意味します。

  1. この場合、サポートされていないメソッドの不正な呼び出しを防ぐにはどうすればよいですか?

  2. ファームウェアを搭載したすべてのデバイスと OS バージョンは、同じ SDK バージョンに対して同じ sdk_int を持っていますか?

  3. Build.VERSION.RELEASE を使用して、バージョン番号を追加で確認できますか?

4

4 に答える 4

4

ログには、エラーIではなく情報がタグ付けされていることに注意してEください。

クラス・ローダーはコードをロードし、バイトコードを検証しながら、欠落しているメソッドへの呼び出しを見つけてログに記録します。コード自体は実行されませんNoSuchMethodError

あなたのSDK_INT値は正しく機能します。

于 2013-09-05T11:13:59.347 に答える
0

前述のように、とにかく setBackground の利点がないため、setBackgroundDrawable を使用します。

それでも使いたいなら。デバイスの SDK バージョンを再確認してください。Build.VERSION.SDK_INT が正しく設定されていないデバイスを知りません。setBackground で例外が発生した場合は、try/catch を実行して setBackgroundDrawable にフォールバックすることもできます。

于 2013-09-05T10:03:02.597 に答える
0

setBackgroundDrawable常に使用しないのはなぜですか?

SDK-INTまた、そのデバイスのバージョンが 15 程度であると想定するだけでなく、そのデバイスのバージョンをデバッグする必要があります。

于 2013-09-05T09:52:29.580 に答える
0

私はこのコードを使用します:

    if (Build.VERSION.SDK_INT<16){
        rl.setBackgroundDrawable(getResources().getDrawable(image));
    } else {
        rl.setBackground(getResources().getDrawable(image));
    }

わかりました、setBackgroundDrawable上記のようにいつでも使用できますが、そうでない場合、上記のコードは完全に機能します。

于 2013-09-05T10:12:32.687 に答える