вероятно JoxTraex не имеет представления о платформе Android или, как они говорят:
, когда кто-то говорит, что это не может быть сделано - всегда есть кто-то, кто этого не делаетзнаю, что и сделает это:)
так, к сути:
Resources - это открытый класс, являющийся просто оболочкой для класса ResourcesImpl
(с устаревшим конструктором - но доступен)
public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)
в приложении каждый вызов выполняется через Context
, поэтому:
1) вы всегда можете предоставитьваша собственная реализация ресурсов
2) или (когда этого достаточно) ваша собственная реализация контекста (таким образом, небо - это предел)
... я теперь чувствую взгляд на "реализацию контекста" - да, выможет даже заменить самый верхний контекст в LoadedApk, Activity и т. д. да, круто?но когда, как?как: с помощью размышлений, когда: хороший дизайнер приложений знает, что это место, где (до) первый / любой вызов такого объекта сделан ...
Но здесь есть один опасный улов - в одном случае, Android пряморазверните Context в ContextImp, и тогда вам нужно будет вернуть этот Context вместо своего - где я буду хранить это в секрете для тех, кто любит загадки :)
также есть в ресурсах
a) скрытый конструктор (лучшая точка входа, поскольку он не создает ReourceImpl (который может быть установлен методом, упомянутым ниже)
public Resources(@Nullable ClassLoader classLoader)
b) скрытый метод
setResImpl(ResourcesImpl)
суммируем:
поэтому, вызвав
Resources.getStringArray(**not existing in APK resource id here**);
в нашей собственной реализации, мы можем получить то, что хотим :)
еще лучше мы можем добавить в нашу реализацию
addResourceById(int,Object)
метод и добавление новых ресурсов :) затем с проверкой назначенной способности ресурса мы будем использовать и повышать рейтинг нашей реализации :), чтобы использовать наш недавно добавленный метод :)
кстати: если кто-тоНе говорит вам: «не надо этого делать - блаблабла», это лучшая причина для этого!- если это не разрешено законом:)
достаточно, чтобы теория пошла на практику:
пример Реализация контекста перенаправляет вызовы getString:
public class MyContext extends Context {
....
// override context get resources method
@Override
public android.content.res.Resources getResources() {
// get super resources
android.content.res.Resources resources = super.getResources();
// pull assets
android.content.res.AssetManager assets = resources.getAssets();
// pull metrics
android.util.DisplayMetrics displayMetrics = resources.getDisplayMetrics();
// pull configuration
android.content.res.Configuration configuration = resources.getConfiguration();
// construct new anon resource implementation
return new android.content.res.Resources(assets, displayMetrics, configuration) {
// overrride interesting method
@android.support.annotation.NonNull
@Override
public String getString(int id) throws android.content.res.Resources.NotFoundException {
return id == pl.ceph3us.base.common.R.string.my_sweet_google
? "fck_you_google";
: super.getString(id);
}
};
}
}