作为我正在开发的应用程序的一部分,请求必须下载包含需要在app中使用的语言翻译的JSON文件,而不是常用的strings.xml文件,因为这样任何翻译都可以可以通过更新某个Web门户上的外部JSON文件来更改应用程序,并且无需在每次要更改语言翻译时都进行新的构建。
我已经做到了这一点,一切都运行良好,方式如下: 例如,如果活动开始后我在xml中有按钮,我可以引用该按钮并从我在启动时下载的JSON中设置它的文本。
btnLogin = (Button) v.findViewById(R.id.btnLogin);
// reads translation from json that is stored in external application directory
btnLogin.setText(ResourceManager.getString("btnLogin"));
但我的问题是,有什么方法可以避免始终从活动中设置此文本,我能以某种方式从定义此按钮的XML文件中执行此操作吗?
<Button
android:id="@+id/btnLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="{ResourceManager.getString("btnLogin")}"/>
有没有可能让我从xml调用某个函数并将其结果绑定到text属性,还是有其他方法可以避免引用所有按钮/ textview以及其他来自活动和设置文本的控件?
答案 0 :(得分:0)
您是否尝试在Application类中覆盖getResources()然后 返回资源的扩展版本。
好的,我尝试了这个,它似乎适用于我的xml文件中的大多数资源。 您可能必须在多个地方覆盖它。我只是在我的Application类中覆盖它。
private MyResources resources;
@Override
public Resources getResources() {
if (resources == null) {
resources = new MyResources(super.getResources());
}
return resources;
}
class MyResources extends Resources {
public MyResources(Resources resource) {
super(resource.getAssets(), resource.getDisplayMetrics(), resource.getConfiguration());
}
public String getString(int resId) {
return "Bob"; // Use your ResourceManger here
}
}
这对我有用..