本文共 2239 字,大约阅读时间需要 7 分钟。
以下解决方法摘自 stackoverflow , 点击下方链接可跳转
You have some options to handle this deprecation the right (and future proof) way, depending on which kind of drawable you are loading:
ContextCompat.getDrawable(getActivity(), R.drawable.name);
You’ll obtain a styled Drawable as your Activity theme instructs. This is probably what you need.
* B) drawables without theme attributes
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
You’ll get your unstyled drawable the old way.
EXTRA) drawables with theme attributes from another theme
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
Explanation:
API 21 (Android 5.0 Lollipop) introduced some new theme attributes such as android:colorAccent
that modify the appearance of drawables that hold references to those new theme attributes values.The AppCompat library handles pre and post-Lollipop drawable styling for you.
If you do use the deprecated getDrawable()
method to obtain a drawable resource with theme attributes, you will get a partially-styled drawable and a logcat warning.You can see this in API 22 android.content.res.Resources
source code:
@Deprecated@Nullablepublic Drawable getDrawable(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;}
You should use the following code from the support library instead:
ContextCompat.getDrawable(context, R.drawable.***)
Using this method is equivalent to calling:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return resources.getDrawable(id, context.getTheme());} else { return resources.getDrawable(id);}
As of API 21, you should use the getDrawable(int, Theme)
method instead of getDrawable(int)
, as it allows you to fetch a drawable object associated with a particular resource ID for the given screen density/theme. Calling the deprecated getDrawable(int)
method is equivalent to calling getDrawable(int, null)
.
转载地址:http://dvvpi.baihongyu.com/