作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
AppCompatResources.getDrawable 如果资源 ID 无效或链接到其他可绘制对象,则可能返回 null。 getDrawable(context, resid) 返回 null 是否还有其他原因?
我有时会遇到这样的代码,这里的null检查是否合理?:
initToolbar() {
ActionBar actionBar = getSupportActionBar();
Drawable drawable = AppCompatResources.getDrawable(getContext(), R.drawable.ic_close_24dp);
//is there any reason to check for null
if (drawable != null) {
drawable.setColorFilter(ColorUtil.getColorPrimary(requireContext()), PorterDuff.Mode.MULTIPLY);
actionBar.setHomeAsUpIndicator(drawable);
} else {
actionBar.setHomeAsUpIndicator(ic_close_primary_24dp);
}
}
之所以会出现这样的代码,是因为studio会对这样的代码发出警告:
mToolbar.setNavigationIcon(R.drawable.ic_24_close);
mToolbar.getNavigationIcon().setColorFilter(filter); //warning here, but should I react to it?
最佳答案
这是因为AppCompatDrawableManager.getDrawable()
可以返回null
:
public Drawable getDrawable(@NonNull Context context, @DrawableRes int resId,
boolean failIfNotKnown) {
checkVectorDrawableSetup(context);
Drawable drawable = loadDrawableFromDelegates(context, resId);
if (drawable == null) {
drawable = createDrawableIfNeeded(context, resId);
}
if (drawable == null) {
drawable = ContextCompat.getDrawable(context, resId);
}
if (drawable != null) {
// Tint it if needed
drawable = tintDrawable(context, resId, failIfNotKnown, drawable);
}
if (drawable != null) {
// See if we need to 'fix' the drawable
DrawableUtils.fixDrawable(drawable);
}
return drawable;
}
关于android - 为什么 AppCompatResources.getDrawable(Context context, int resId) 标记为@Nullable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58023623/
我正在尝试使用 Espresso 断言在 Android 中的 ImageView 上是否显示了正确的图像。图像以 SVG 格式提供,并使用 Android Studio 转换器直接转换为矢量可绘制对
我对这两个 API 有点困惑。 ResourcesCompat.getDrawable(Resources res, int id, Resources.Theme theme) Return a d
AppCompatResources.getDrawable 如果资源 ID 无效或链接到其他可绘制对象,则可能返回 null。 getDrawable(context, resid) 返回 null
我是一名优秀的程序员,十分优秀!