不推荐使用setBackgroundDrawable()


86

因此,我的SDK从15变为21,当我致电时setBackgroundDrawable(),Android Studio告诉我它已过时。

我想使用以下方法解决它:

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()”处收到一个错误。

那么,您将如何处理呢?


您收到错误或警告吗?
Bryan Herbst 2014年

清单中的最小sdk版本的值是多少?
Manmohan Badaya 2014年

4
使用setbackgroundresource(R.drawable.img_wstat_tstorm); 为更高的版本。setBackgroundDrawable在更高版本中有所描述,希望对您有所帮助
prakash 2014年

最小sdk为15。我用红色下划线标出了“ setBackground()”,但该应用程序可以运行,因此我认为这是一个警告
Makoto 2014年

您必须获取Add @SupressWarning
SweetWisher

Answers:


105

这是一个有趣的话题。显然,您这样做的方式是正确的。实际上,这只是一个命名决策更改。正如这个答案所指出的,setBackground()只需致电setBackgroundDrawable()

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

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

您可以查看此线程以获取有关所有这些的更多信息。


20
您应该注意,setBackground()这不适用于API16之前的版本,可能是setBackgroundResource
Mood

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)而不是drawable的参数,因此出现错误。试试这个:

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


setBackground预期仅可绘制ID
SweetWisher 2014年

你不对 来自API文档:android.view.View.setBackground(Drawable background); 参数:background用作背景的Drawable,或者为null以移除背景。
David C Adams




1

截至2018年11月23日正确

科特林:

view.background = resources.getDrawable(R.drawable.ic_image,theme)

如果包括主题参数。


0

我正在使用minSdkVersion 16和targetSdkVersion 23以下对我有用,它使用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 '16

-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);

如果您可以用几句话总结一下您在这里要做的事情,那真的会有所帮助...
arkascha
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.