我想设置一个视图的背景绘图。这有两个方法(据我所知):setBackground和setBackgroundDrawable。

当我使用setBackground时,它说它已添加在API级别16,但我的项目的最小SDK版本是7。我猜在16秒以下就不管用了,对吗?但当我使用setBackgroundDrawable时,它说它已弃用。

我应该用什么?


当前回答

使用Android studio 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);
    }

其他回答

它被弃用了,但仍然可以使用,所以你可以使用它。但如果你想完全正确,只是为了它的完整性……你可以这样做:

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或类似的东西。

您可以使用API级别1中的setBackgroundResource()代替。

这适用于我:视图视图是你的editText, spinner…等。int drawable是可绘制路由示例(r。drawable。yourdrawable)

 public void verifyDrawable (View view, int drawable){

        int sdk = Build.VERSION.SDK_INT;

        if(sdk < Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackgroundDrawable(
                    ContextCompat.getDrawable(getContext(),drawable));
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(getResources().getDrawable(drawable));
        }    
    }

使用Android studio 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);
    }

我知道这是一个老问题,但我也有类似的情况,我的解决方案是

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

然后你可以使用“绘制”,应用颜色滤镜等等