如何获取与?android:attr/fingerprintAuthDrawable对应的资源ID?
解决方法
你的布局中使用的?android:attr/fingerprintAuthDrawable是主题属性引用,并非固定的资源ID,所以没法直接找到一个通用的defaultID传入getResources().getDrawable()来恢复初始Drawable,推荐用以下两种方式处理:
提前保存初始Drawable
在页面初始化完成后(比如onViewCreated或onCreate阶段),先把ImageView的初始Drawable保存下来:// 调用mutate()避免后续修改Drawable时影响原对象 Drawable defaultFingerprintDrawable = imageView.getDrawable().mutate();需要恢复时直接用保存的对象:
imageView.setImageDrawable(defaultFingerprintDrawable);从主题中重新解析属性获取
如果没提前保存,可以通过主题解析这个属性来获取对应的Drawable:TypedArray typedArray = getTheme().obtainStyledAttributes(new int[]{android.R.attr.fingerprintAuthDrawable}); Drawable defaultDrawable = typedArray.getDrawable(0); typedArray.recycle(); // 必须回收TypedArray防止内存泄漏 imageView.setImageDrawable(defaultDrawable);这种方式获取的是当前主题下该属性对应的Drawable,和布局初始设置的一致,但如果运行中主题发生变化,结果可能不同。
内容的提问来源于stack exchange,提问作者NovaDenizen
相关产品推荐
相关产品推荐

