我在使用Android版本4.0.4时,使用了setBackground方法,程序崩溃.

提示:Caused by: java.lang.NoSuchMethodError: android.widget.ImageView.setBackground


经所有资料,和Android的系统版本有关系。

经查找大于等于API16的源码

首先看一下setBackgroundDrawable

setBackground和setBackgroundDrawable的区别_第1张图片

提示此方法已经过时,已经被setBackground方法替代


下面看一下setBackground方法

setBackground和setBackgroundDrawable的区别_第2张图片


在小于API16的源码中,只找到了setBackgroundDrawable方法,没有找到setBackground方法

setBackground和setBackgroundDrawable的区别_第3张图片


从而得到

(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);        }    }



更多相关文章

  1. BiliBili-IJKPlayer播放器源码分析(一)
  2. php、java、android、ios通用的3des+base64加密方法
  3. android中webView JS调用Android的方法、webView的下拉刷新(Swipe
  4. ubuntu android 源码下载
  5. 转:Android中几种图像特效处理方法小结
  6. 【Android okhttp源码解析 四】任务调度核心类dispatcher解析
  7. Windows下用Git下载android源码
  8. 5.17学习内容 android判断软键盘状态、系统键盘监控、生成中间lo
  9. Android状态栏适配源码解析。

随机推荐

  1. MySQL定时全库备份数据库
  2. MySQL系列之十 MySQL事务隔离实现并发控
  3. MySQL系列之十一 日志记录
  4. MySQL系列之四 SQL语法
  5. MySQL系列之七 MySQL存储引擎
  6. MySQL系列之十四 MySQL的高可用实现
  7. MySQL系列之十五 MySQL常用配置和性能压
  8. MySQL系列之三 基础篇
  9. MySQL系列之一 MariaDB-server安装
  10. MySQL系列之二 多实例配置