我在使用Android版本4.0.4時,使用了setBackground方法,程序崩潰.
提示:Caused by: java.lang.NoSuchMethodError: android.widget.ImageView.setBackground
經所有資料,和Android的系統版本有關係。
經查找大於等於API16的源碼
首先看一下setBackgroundDrawable
提示此方法已經過時,已經被setBackground方法替代
下面看一下setBackground方法
在小於API16的源碼中,只找到了setBackgroundDrawable方法,沒有找到setBackground方法
從而得到
(1)在API16之後,Android系統由setBackground方法替代了setBackgroundDrawable方法,但是經查看源碼,setBackground方法中是直接調用了setBackgroundDrawable方法,所以API16之後既可以使用setBackground,也可以使用setBackgroundDrawable,但是使用setBackgroundDrawable提示過時。
(2)在API之前,Android值提供了setBackgroundDrawable方法。
所以我們在程序中可以進行判斷
/**
* 在API16以前使用setBackgroundDrawable,在API16以後使用setBackground
* API16<---->4.1
* @param view
* @param drawable
*/
private void setBackgroundOfVersion(View view, Drawable drawable) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
//Android系統大於等於API16,使用setBackground
view.setBackground(drawable);
} else {
//Android系統小於API16,使用setBackground
view.setBackgroundDrawable(drawable);
}
}