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

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

我应该用什么?


当前回答

你可以使用setBackgroundResource()代替,即relativeLayout.setBackgroundResource(R.drawable.back);

这对我很有用。

其他回答

你还可以这样做:

try {
     myView.getClass().getMethod(android.os.Build.VERSION.SDK_INT >= 16 ? "setBackground" : "setBackgroundDrawable", Drawable.class).invoke(myView, myBackgroundDrawable);
} catch (Exception ex) {
     // do nothing
}

编辑:正如@BlazejCzapp所指出的,如果你能设法解决没有反射的问题,最好避免使用反射。我有一个用例,在没有反思的情况下我无法解决,但这不是上面的情况。欲了解更多信息,请访问http://docs.oracle.com/javase/tutorial/reflect/index.html

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

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

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

使用setBackgroundResource (R.drawable.xml / png)

你可以使用setBackgroundResource()代替,即relativeLayout.setBackgroundResource(R.drawable.back);

这对我很有用。

使用ViewCompat。setBackground(视图、背景);