atu*_*gra 25 string resources android
我在strings.xml文件中声明了一个字符串,并在我的活动中将其用作R.string.compose_title.(将其设置为标题,即setTitle(R.id.compose_title)).现在在某些情况下我想编辑字符串然后用它来设置标题.我怎样才能做到这一点 ?
PS我只需要更改单个字符串的值,因此使用本地化为每种情况(根据用户而变化)声明一个新的strings.xml似乎效率低.
And*_*lva 47
您需要了解的一件事是,当您将数据作为资源提供时,无法在运行时修改它.例如,在drawable文件夹中的drawables无法在运行时修改.确切地说,无法以编程方式修改"res"文件夹.
这也适用于Strings.xml,即"Values"文件夹.如果您想要一个必须在运行时修改的String,请创建一个单独的类,并将您的字符串放在此类中并在运行时访问.这是我发现的最佳解决方案.
示例方法:
如何?通过将一个变量引用更改为另一个引用
用法:
setRColor(pl.mylib.R.class,"endColor",pl.myapp.R.color.startColor);
// override app_name in lib R class
setRString(pl.mylib.R.class,"app_name",pl.myapp.R.string.app_name);
Run Code Online (Sandbox Code Playgroud)
基本方法:
public static void setRColor(Class rClass, String rFieldName, Object newValue) {
setR(rClass, "color", rFieldName, newValue);
}
public static void setRString(Class rClass, String rFieldName, Object newValue) {
setR(rClass, "string", rFieldName, newValue);
}
// AsciiStrings.STRING_DOLAR = "$";
public static void setR(Class rClass, String innerClassName, String rFieldName, Object newValue) {
setStatic(rClass.getName() + AsciiStrings.STRING_DOLAR + innerClassName, rFieldName, newValue);
}
Run Code Online (Sandbox Code Playgroud)
辅助方法:
public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) {
try {
return setStatic(Class.forName(aClassName), staticFieldName, toSet);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}
}
public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) {
try {
Field declaredField = aClass.getDeclaredField(staticFieldName);
declaredField.setAccessible(true);
declaredField.set(null, toSet);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
@bradenV2 我的应用程序支持多种语言,因此我想从当前使用的 strings.xml 中获取一个字符串并更改它,然后使用该字符串 – atuljangra 12 年 3 月 12 日 22:04
ps 上面的解决方案很好,例如当你想在已经编译的 lib/jar 中注入一些数据时。但是,如果您想本地化字符串,只需在每个 LANG 代码的res下创建文件夹,例如 values-CC,其中 cc 是 lang 代码(values-de,values-cs)等
那么你有2个选择:
像这样:
configuration = new Configuration(resources.getConfiguration());
configuration.setLocale(targetLocale);
String localized = Context.createConfigurationContext(configuration)
.getResources()
.getString(resourceId);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55595 次 |
| 最近记录: |