Android高版本getDrawable(int id)废弃后的替代方法

Android  2021年3月30日 pm12:28发布4年前 (2021)更新 城堡大人
126 0 0

前言

在Android 高版本上使用getDrawable(int id)时,如下,有提示使用的这个方法废弃了

    mIvAlbum.setBackground(getResources().getDrawable(R.drawable.music_album_unknown));

点进入源码查有提示我们使用新的方法getDrawable(int, Theme)

     /*
     * ......
     * @see #getDrawable(int, Theme)
     * @deprecated Use {@link #getDrawable(int, Theme)} instead.
     */
    @Deprecated
    public Drawable getDrawable(@DrawableRes int id) throws NotFoundException {
        final Drawable d = getDrawable(id, null);
        if (d != null && d.canApplyTheme()) {
            Log.w(TAG, "Drawable " + getResourceName(id) + " has unresolved theme "
                    + "attributes! Consider using Resources.getDrawable(int, Theme) or "
                    + "Context.getDrawable(int).", new RuntimeException());
        }
        return d;
    }

总结

虽然getDrawable(int id)已经废弃了,但是依旧还是可以用的。

如果你的Android版本比较高,那就按照官方的提示,可以使用getDrawable(int, Theme)替代。

正文

  1. 使用drawable资源但不为其设置theme主题
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
  1. 使用默认的activity主题
ContextCompat.getDrawable(getActivity(), R.drawable.name);
  1. 使用自定义主题
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);

推荐使用

为了兼容,可以使用如下

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

参考文章

  1. Context#getResources().getDrawable()方法过时后的替代方法
  2. Android getResources().getDrawable() deprecated API 22

版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android启动Activity到副屏

前言随着Android版本的提高,现在Android设备大都存在2个屏幕,也就是主屏和副屏。偶尔需要把指定副屏显示指定的界面,因此有空整理一下相关内容。记录于此,方便自己查阅。正文记录一下常用的几种方式,启动Activity到副屏,也对比一下优缺点。隐藏内容!付费阅读后才能查看!¥2 ...

[摘]Android如何设置TextView的行间距、行高。

在Android系统中TextView默认行间距比较窄,不美观。我们可以设置每行的行间距,可以通过属性android:lineSpacingExtra或android:lineSpacingMultiplier来做。修改行间距、行高你可以使用如下TextView属性1、android:lin...

个人常用的ListView方法简介

前言项目中ListView还是比较常用的,ListView有些方法或者配置属性都是比较常用也比较容易忘记的。因此,今天抽空整(抄)理(袭)一下,以便查阅。PS: 现在RecyclerView比较多了好记性不如烂笔头正文停止滚动 private void stopListView...

Android6.0 禁止安装未知来源应用

推荐使用 极客导航 :125啦极客导航(http://www.biumall.com/jike.html)在Android 中可以禁止安装第三方应用,如果你的设备需要禁止所有应用安装,你就可以在这做些文章。/*** @deprecated Use {@link android.pro...

Android单编译时出现ninja no work to do

前言记录一下正编译Android后使用ninja出现如下提示:ninja: no work to do.记录于此,方便自己查阅。正文隐藏内容!付费阅读后才能查看!¥2 ¥4多个隐藏块只需支付一次付费阅读参考文章无

[摘]List、Set、Map详解及区别

一、List接口List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。实现List接口的集合主要有:ArrayList、Li...