260

ビューの背景ドローアブルを設定したい。これには 2 つの方法があります (私が見る限り):setBackgroundsetBackgroundDrawable.

を使用すると、 API レベル 16setBackgroundで追加されたと表示されますが、私のプロジェクトの SDK の最小バージョンは 7 です。しかし、setBackgroundDrawable を使用すると、非推奨と表示されます。

私は何を使うべきですか?

4

12 に答える 12

405

廃止されましたが、まだ機能しているため、そのまま使用できます。しかし、それを完全にするために、完全に正しくしたい場合は...次のようなことをします:

int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    setBackgroundDrawable();
} else {
    setBackground();
}

これを機能させるには、buildTarget api 16 と min build を 7 などに設定する必要があります。

于 2012-08-14T07:35:55.137 に答える
112

setBackgroundResource()代わりに API レベル 1 を使用できます。

于 2013-02-06T09:37:03.043 に答える
55

ソースコードに示されているように、現在2つの機能に違いはないようです(この投稿のクレジット):

public void setBackground(Drawable background) {
    //noinspection deprecation
    setBackgroundDrawable(background);
}

@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }

これは、 fill-parent と match-parent の場合と同様に、単なる命名の決定です。

于 2013-09-17T07:54:32.357 に答える
19

これは古い質問であることは知っていますが、同様の状況があり、私の解決策は

button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();

次に、「Drawable」で遊んだり、カラーフィルターを適用したりできます

于 2013-03-29T23:20:43.673 に答える
7

Androidスタジオ1.5.1を使用すると、次の警告が表示されました:

Call requires API level 16 (current min is 9): android.view.View#setBackground

および非推奨についての苦情

'setBackgroundDrawable(android.graphics.drawable.Drawable)' is deprecated

この形式を使用して、両方を取り除きました:

    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        //noinspection deprecation
        layout.setBackgroundDrawable(drawable);
    } else {
        layout.setBackground(drawable);
    }
于 2016-01-22T09:10:42.190 に答える
-2

私もこの問題を抱えていましたが、ImageViewを使用して回避策を作成しました。

RelativeLayoutを使用して、その中に ImageView を追加してみてください (幅と高さ: fill_parent、scaleType: center)。

また、imageview がRelativeLayout 内の最初の要素であることを確認して、背景として機能するようにします。

于 2014-08-02T11:49:01.863 に答える