Answers:
它已被弃用,但仍然可以使用,因此您可以使用它。但是,如果您想完全正确,则仅是出于完整性考虑...您可以执行以下操作:
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
setBackgroundDrawable();
} else {
setBackground();
}
为此,您需要将buildTarget api设置为16,并将最小build设置为7或类似的值。
android:minSdkVersion="7" android:targetSdkVersion="17"
,但是setBackground()出现错误:调用需要API级别16(当前最小值为7)
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) @SuppressWarnings("deprecation") private static void setBg(RelativeLayout layout, BitmapDrawable TileMe) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { layout.setBackgroundDrawable(TileMe); } else { layout.setBackground(TileMe); } }
您可以改用setBackgroundResource()
API级别1中的哪个。
setBackgroundResource(int)
接受资源ID,因此每次设置背景时都必须使视图膨胀。假设我已经夸大了Drawable,我不希望这样。我想念什么吗?
似乎目前这两个函数之间没有区别,如源代码所示(贷记此帖子):
public void setBackground(Drawable background) {
//noinspection deprecation
setBackgroundDrawable(background);
}
@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }
因此,这只是一个命名决定,类似于fill-parent与match-parent的决定。
我知道这是一个老问题,但是我有类似的情况,我的解决方案是
button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();
然后您可以玩“ Drawable”,应用滤色器等
现在,您可以使用这些选项之一。它在任何情况下都将起作用。您的颜色可以是十六进制代码,如下所示:
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);
希望能帮助到你!
使用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);
}
这对我有用:视图视图是您的editText,微调框...等。而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中的第一个元素,因此它将作为背景。
if
子句。查看正确答案。
您也可以这样做:
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