我想设置一个视图的背景绘图。这有两个方法(据我所知):setBackground和setBackgroundDrawable。
当我使用setBackground时,它说它已添加在API级别16,但我的项目的最小SDK版本是7。我猜在16秒以下就不管用了,对吗?但当我使用setBackgroundDrawable时,它说它已弃用。
我应该用什么?
我想设置一个视图的背景绘图。这有两个方法(据我所知):setBackground和setBackgroundDrawable。
当我使用setBackground时,它说它已添加在API级别16,但我的项目的最小SDK版本是7。我猜在16秒以下就不管用了,对吗?但当我使用setBackgroundDrawable时,它说它已弃用。
我应该用什么?
当前回答
现在您可以使用这两个选项中的任何一个。这在任何情况下都是可行的。 你的颜色可以是十六进制代码,像这样:
myView.setBackgroundResource(ContextCompat.getColor(context, Color.parseColor("#FFFFFF")));
一个颜色资源,像这样:
myView.setBackgroundResource(ContextCompat.getColor(context,R.color.blue_background));
或者一个自定义的xml资源,像这样:
myView.setBackgroundResource(R.drawable.my_custom_background);
希望能有所帮助!
其他回答
你可以使用setBackgroundResource()代替,即relativeLayout.setBackgroundResource(R.drawable.back);
这对我很有用。
这适用于我:视图视图是你的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));
}
}
我也有这个问题,但我做了一个工作使用ImageView。
尝试使用RelativeLayout并在其中添加一个ImageView(宽度和高度:fill_parent, scaleType: center)。
同时确保imageview是RelativeLayout中的第一个元素,因此它将作为背景。
似乎目前这两个函数之间没有区别,如源代码所示(归功于这篇文章):
public void setBackground(Drawable background) {
//noinspection deprecation
setBackgroundDrawable(background);
}
@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }
所以这只是一个命名决定,类似于fill-parent vs match-parent。
你还可以这样做:
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