不推荐使用setBackgroundDrawable()

时间:2014-11-26 04:21:08

标签: android deprecated deprecation-warning

所以我的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()”收到错误。

那么,你会怎么处理它?<​​/ p>

11 个答案:

答案 0 :(得分:87)

这是一个有趣的话题。显然,你做这件事的方式是正确的。它实际上只是一个命名决定的变化。正如this answer指出的那样,setBackground()只会调用setBackgroundDrawable()

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

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

您可以查看this thread以获取有关所有这些的更多信息。

答案 1 :(得分:21)

也许您可以尝试以下方法:

setBackgroundResource(R.drawable.img_wstat_tstorm);

答案 2 :(得分:17)

这很有趣,因为该方法已被弃用,但如果您查看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);
    }

答案 3 :(得分:7)

截至2018年8月15日更正

使用支持库

data

答案 4 :(得分:3)

您收到错误,因为getResources()。getDrawable()将id(int)作为其参数而不是drawable。试试这个:

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

答案 5 :(得分:2)

这在我的情况下是正确的 解决这个问题

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

答案 6 :(得分: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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

截至2018年11月23日更正

科特琳:

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

如果包含主题参数。

答案 9 :(得分:0)

使用此:

myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)

答案 10 :(得分:-1)

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