setBackgroundDrawable()和setBackground()有什么区别?(涉及IT技术)

4

我刚将我的Android项目的构建目标升级到API 17,现在我收到了有关setBackgroundDrawable过时的警告。答案似乎是使用setBackground,但这在旧版本中不可用。

使用新方法是否有任何实际优势,还是Google只是想改变名称?如果两者的表现相同,我不认为通过平台版本检查或反射来使我的代码变得复杂有任何意义。

1个回答

8

使用新方法是否有实际优势,还是Google只是想改变名称?

他们似乎只想改变名称,请看源代码

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

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

所有的工作仍然在 setBackgroundDrawable() 中完成。目前,您可以忽略弃用警告,但要理解在未来的某个API版本中,setBackgroundDrawable() 将被移除。


如果你好奇,setBackgroundResource(int resid) 仅仅是从资源ID中创建了一个可绘制对象,并调用了 setBackground() 方法(该方法又会调用 setBackgroundDrawable() 方法)...

2
对于现在查看此内容的任何人,4.4版本仍然具有相同的代码,只是将其转发到setBackgroundDrawable()函数。http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/android/view/View.java#View.setBackground%28android.graphics.drawable.Drawable%29 - sgarman
@sgarman 感谢提供链接!我也在那里检查了5.1版本,但代码仍然是一样的。 - Jenix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接