setBackground和setBackgroundDrawable的區別

我在使用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);
        }
    }

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章