Android 如何通过单击事件更改“我的所有活动”(按钮文本、文本视图等)上的所有文本?

Android 如何通过单击事件更改“我的所有活动”(按钮文本、文本视图等)上的所有文本?,android,translation,language-translation,Android,Translation,Language Translation,当我点击一个按钮或选择一个菜单项时,我可以将我应用程序中的所有文本更改为其他文本吗 我实际上想做的是让我的应用程序翻译成几种非iso语言(“非iso”意味着我在wiki的列表中找不到它们) 因此,我希望用户能够选择他们查看我的应用程序时使用的语言,而不管他们的手机语言设置是什么。我希望他们能够从应用程序中选择语言 我在strings.xml中有所有的英语按钮和textview文本,我可以为新语言制作一个strings-xx.xml 我将使用列出语言选项的子菜单。因此,文本更改将响应该菜单上的on

当我点击一个按钮或选择一个菜单项时,我可以将我应用程序中的所有文本更改为其他文本吗

我实际上想做的是让我的应用程序翻译成几种非iso语言(“非iso”意味着我在wiki的列表中找不到它们)

因此,我希望用户能够选择他们查看我的应用程序时使用的语言,而不管他们的手机语言设置是什么。我希望他们能够从应用程序中选择语言

我在strings.xml中有所有的英语按钮和textview文本,我可以为新语言制作一个strings-xx.xml

我将使用列出语言选项的子菜单。因此,文本更改将响应该菜单上的onclick事件。 欢迎任何指点。

摘自:

您无法将任何有效的语言字符串传递给setLocale方法,如“de”或“it”,但必须重新启动活动

如果你按下后退按钮,我不知道你的应用程序会如何运行。如果它启动了您的“旧”活动,请在重新启动活动时尝试以下操作:

public void setLocale(String lang) { 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, YOURACTIVITY.class);
    refresh.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(refresh); 

}

此处相关信息:非常感谢您的回复。对我迟迟没有回复表示歉意。一位至爱的人去世了。好的,我已经应用了你的解决方案,效果很好。我还有一个loadLocale()方法,我在启动程序活动的onCreate中调用它。我遇到的唯一问题是,当我关闭应用程序并重新打开时,会出现一个空白屏幕。我发现,当我注释掉loadLocale方法时,应用程序正常加载,区域设置更改为ok,但区域设置没有保存。下面是loadLocale()方法。最后一行的changeLanguage()与上面的setLocale()方法类似。
public void loadLocale(){String langPref=“Language”;SharedReferences prefs=getSharedReferences(“com.georgey.multilanguageapp.PREFERENCES”,Context.MODE_PRIVATE);String language=prefs.getString(langPref,“”);changeLanguage(language);}
public void setLocale(String lang) { 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, YOURACTIVITY.class);
    refresh.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(refresh);