setBackgroundDrawable()は非推奨


86

そのため、私のSDKは15から21になり、電話をかけると、AndroidStudioはsetBackgroundDrawable()非推奨であると通知します。

私はそれを使ってそれを回避することを考えました:

int sdk = android.os.Build.VERSION.SDK_INT;

if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.img_wstat_tstorm));
} else {
    layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
}

しかし、その後、「setBackground()」でエラーが発生します。

それで、あなたはそれをどのように扱いますか?


エラーや警告が表示されますか?
ブライアンハーブスト2014年

マニフェストの最小SDKバージョンの値は何ですか?
マンモハンバダヤ2014年

4
setbackgroundresource(R.drawable.img_wstat_tstorm);を使用します。より高いバージョンの場合.setBackgroundDrawableはより高いバージョンで非難されます、この希望はあなたを助けます
prakash 2014年

最小SDKは15です。「setBackground()」に赤で下線が引かれていますが、アプリが実行されているため、警告だと思います
真琴

Add @SupressWarning
–SweetWisherツ

回答:


105

それは興味深いトピックです。あなたがそれをしている方法は、明らかに正しいです。これは実際には単なる命名決定の変更です。この答えは指摘して、setBackground()ちょうど呼び出しますsetBackgroundDrawable()

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

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

これらすべての詳細については、このスレッドを参照してください。


20
setBackground()API16より前では機能しないことに注意してください。代わりに、次のようにすることができますsetBackgroundResource
気分

26

多分あなたは以下を試すことができます:

setBackgroundResource(R.drawable.img_wstat_tstorm);

18

そのメソッドは非推奨であるため面白いですが、Androidソースコードを見ると次のことがわかります。

   /**
     * 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);
    }

12

2018年8月15日現在正し​​い

サポートライブラリを使用する

Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null);
ViewCompat.setBackground(layout, drawable);

7

getResources()。getDrawable()が引数としてドローアブルではなくID(int)を受け取るため、エラーが発生します。これを試して:

layout.setBackground(getResources().getDrawable(R.id.img_wstat_tstorm));


setBackgroundは期待しDrawableのIdがのみ
SweetWisherツ

あなたは間違っています。APIドキュメントから:android.view.View.setBackground(Drawable background); パラメータ:background背景として使用するDrawable、または背景を削除するnull。
David C Adams


3
//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)

2

私の場合、これは正しいですこの問題を解決してください

 imageView.setBackgroundResource(images[productItem.getPosition()]);


0

minSdkVersion16とtargetSdkVersion23を使用しています。以下は私のために機能しています。ContextCompat.getDrawable(context、R.drawable.drawable);を使用しています。

使用する代わりに: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

むしろ使用:

layout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.img_wstat_tstorm));

getActivity() アクティビティから呼び出す場合は、フラグメントで使用されます this


minSdk 15に質問があります
Harish Gyanani 2016年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.