我如何使用ResourcesProvider/ResourcesLoader类来动态加载资源?

背景

我发现了这些新的Android 11类(ResourcesLoader和ResourcesProvider),我认为他们可以让你提供自己的资源加载整个应用程序,这可以帮助你更喜欢从云(如Lokalise和Crowdin)加载主题等…

这个问题

我找不到任何如何使用它们的例子,以及我所发现的是否确实正确。

我发现的唯一一件事是从这篇缓存的文章“驯服Android资源和LayoutInflater的字符串操作”:

Android 11引入了动态加载资源的能力

ResourcesLoader ResourcesProvider。这不仅限于

字符串文件,但也允许动态加载绘图和其他

资源文件。这是使用这些类的一种近似方法

val provider = ResourcesProvider.loadFromDirectory("/somepath/", null) // or loadFromApk() 
val loader = ResourcesLoader() loader.addProvider(provider) resources.addLoaders(loader) // Application resources 

这里没有提供适当的API示例

现在,它只能在安卓11及以上版本上使用

对于大多数应用程序来说,这个API可用的时间很长。

我发现什么

我想尝试一下Lokalise库,它提供了一个参考资料的实例(在这里写的)。

不幸的是,我在一开始就发现如何使用它来提供这个实例。

它似乎是一个非常罕见的用例和新类,几乎没有人愿意写它。甚至关于我在2020年发现的那篇文章,它也被删除了,我不得不使用它的缓存版本……

的问题

这些类真的可以用来动态提供资源(字符串/主题)吗?

它可以与Lokalise一起使用,所以我给它的SDK的实例?

这些类是否有一个支持库,以便它可以在Android API 30之前使用?

编辑:在这里找到了一个样本。在那里,他们使用一个APK文件,该文件被加载使用其资源作为最高优先级:

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        
        val file = File(cacheDir, "overrideResources")
        unzip(ZipInputStream(assets.open("override.apk")), file)
  
        val rl = ResourcesLoader()
        rl.addProvider(ResourcesProvider.loadFromDirectory(file.path, null))
        resources.addLoaders(rl)
    }
}
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码