最近在写android程序时,遇到以下情形:
底部导航栏要用到4个ImageView来实现,在点击不同的ImageView是,要对其背景色进行设置,在使用ImageView关于setBackground相关属性设置时,会出现异常,从而导致android程序崩溃试了好多办法都不行,于是乎,就到android 官方网站查API,才把问题解决。写一篇博客记下来,防止以后再忘记。
首先看一下android官方给的文档:
public void setBackground (Drawable background)
Set the background to a given Drawable, or remove the background. If the background has padding, this View's padding is set to the background's padding. However, when a background is removed, this View's padding isn't touched. If setting the padding is desired, please use setPadding(int, int, int, int)
.
Parameters
background | The Drawable to use as the background, or null to remove the background |
---|
public void setBackgroundColor (int color)
Sets the background color for this view.
Parameters
color | the color of the background |
---|
public void setBackgroundDrawable (Drawable background)
This method was deprecated in API level 16.
use setBackground(Drawable)
instead
public void setBackgroundResource (int resid)
Set the background to a given resource. The resource should refer to a Drawable object or 0 to remove the background.
Related XML Attributes
Parameters
resid | The identifier of the resource. |
---|
从官方给出的API可以得出以下结论:
1.setBackgroundColor(),setBackgroundDrawable(),setBackgroundResource()三个方法从API 1开始就已经存在,而setBackgrouond()是从API 16才引进来的(Android 4.1开始),目的是为了取代setBackgroundDrawable().
所以如果开发的android API 在16+,则推荐使用setBackground().
2.三者区别:
setBackgroundColor(int color)
看其参数和说明可知,要传入一个颜色的ID值,可以使在colors.xml中定义的资源,也可以使用ARGB模式的十六进制数值来表示,如0xFFFF0000(红色);
setBackgroundResource(int resid)
这个方法在XML中有对应的属性android:background,可以理解为给ImageView设置背景,参数为资源的ID。
setBackground(Drawable background)
这个表示给ImageView设置背景,参数为资源,一般为图片,与其他不同的是,当背景有内边距的时候,那么View的内边距被设置和背景的内边距一样,当背景不存在的时候,View的背景也不存在。