【发布时间】:2020-06-07 23:07:12
【问题描述】:
我想创建一个在应用程序启动时触发的扩展资源类。
public class ResourceUtil extends Resources {
public ResourceUtil(AssetManager assets, DisplayMetrics metrics, Configuration config) {
super(assets, metrics, config);
}
}
但是,我收到警告:
资源(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration)' 是 自 API 25 起已弃用。
是否可以扩展 Resources 类,或者该功能是否已弃用?我不知道如何以不同的方式构造它,以防有一个适用于 25 及以上 API 级别的有效构造函数。
编辑:Android Resources page 状态:
资源(AssetManager资产、DisplayMetrics指标、配置n配置)
此构造函数已弃用。资源不应由应用程序构建。请参阅 Context.createConfigurationContext(Configuration)。
那么,从 API 25 及更高版本开始,Android 究竟希望我们做什么,同时保持相同的功能?这是否意味着放弃 Resources 类并获取资源并覆盖 Context 中的值,然后将其传递给 Activity/Fragments?一些方向将不胜感激。
编辑 2:我发现 another thread from StackOverflow 可能会覆盖活动的公共方法 getResources()。这个来自Mohammed Ersan 的答案需要放在一个活动中:
ResourceUtil res;
@Override
public Resources getResources() {
if (res == null) {
res = new ResourceUtil(super.getAssets(),super.getResources().getDisplayMetrics(), super.getResources().getConfiguration());
}
return res;
}
但是,即使正在使用子类,它仍然无法在 API 级别 25 及更高级别上运行。
【问题讨论】:
-
为什么需要扩展
Resources类? -
我想在启动时覆盖它的一个公共方法。如果资源具有特定属性,我想返回一个自定义值。这可能吗?
标签: android class constructor android-resources