gpt4 book ai didi

Android - 如何在运行时注入(inject) values/strings.xml

转载 作者:行者123 更新时间:2023-12-04 01:24:27 25 4
gpt4 key购买 nike

考虑到我有一个允许我获取 strings.xml 的 Rest API文件。
下载后是否可以设置为默认 values/strings.xml应用程序的文件?

最佳答案

字符串资源是静态定义的,不能在运行时更改。
但是,您可以使用 Restring库通过添加依赖项在运行时设置和加载字符串:

// Replace bundled strings dynamically
implementation 'dev.b3nedikt.restring:restring:4.0.3'

// Intercept view inflation
implementation 'io.github.inflationx:viewpump:2.0.3'

// Allows to update the text of views at runtime without recreating the activity
implementation 'dev.b3nedikt.reword:reword:1.1.0'
在您的应用程序类中初始化它:
Restring.init(this,
new RestringConfig.Builder()
.stringsLoader(new SampleStringsLoader())
.loadAsync(false) // If string loader should load strings asynchronously, default true
.build()
);

ViewPump.init(ViewPump.builder()
.addInterceptor(RewordInterceptor.INSTANCE)
.build());
然后它应该被注入(inject)到上下文中:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(Restring.wrapContext(newBase)));
}

@Override
public Resources getResources() {
return Restring.wrapContext(getBaseContext()).getResources();
}
您可以随时加载更多字符串:
// e.g. locale=Locale.EN newStrings=map of (key-value)s
Restring.setStrings(locale, newStrings);
并在不重新启动应用程序的情况下应用更新的资源:
// The layout containing the views you want to localise
final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
Reword.reword(rootView);
更多详情: https://github.com/B3nedikt/restring

关于Android - 如何在运行时注入(inject) values/strings.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62149640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com