我正在寻找一种动态更改字符串资源值的方法.我试图使用反射,但它声称“字段的值无效”. 我在布局中使用字符串作为值,但需要将它们换成不同的语言. 请参阅下面的附件代码. public
我在布局中使用字符串作为值,但需要将它们换成不同的语言.
请参阅下面的附件代码.
public class Lang{ public static void langInit(){ java.lang.reflect.Field[] langStringFields = R.string.class.getFields(); Log.d(Global.TAG,"--> Lang Listing: " + langStringFields.length); Log.d(Global.TAG,"--> Pref for language:"); String prefInLang = Prefs.cPrefsGet.getString("in_lang","en"); String fieldName = null; String fieldValue = null; String newFieldName = null; String tmpA = "one"; for (int i=0; i<langStringFields.length; i++){ java.lang.reflect.Field field = langStringFields[i]; fieldName = field.getName(); try { fieldValue = Global.gActivity.getString(field.getInt(R.string.class)); } catch (Exception e) { e.printStackTrace(); } if (fieldName.substring(0,2).equals("lo")){ try { newFieldName = R.string.class.getField(prefInLang + "_" + fieldName.substring(3)).getName(); } catch (Exception e) { e.printStackTrace(); } Log.d(Global.TAG,"--> Field: " + fieldName + "value: " + fieldValue + "new field:" + newFieldName); try { java.lang.reflect.Field field2 = Class.forName(R.string.class.getName()).getDeclaredField(newFieldName); field2.setAccessible(true); field2.set(R.string.class,tmpA.toString()); }catch (Exception e) { e.printStackTrace(); } } } } }如果您想为您的应用更改当前语言,可以使用标准的内置本地化功能和 changing locale programatically来实现.