STe*_*TeN 4 android localization
可能重复:
在Android中以编程方式更改语言
我可以通过使用Android本地化支持(而不是某些自己的/第三方解决方案)基于例如菜单中的用户选择来更改应用程序语言运行时吗?
非常感谢
我在应用程序中按下按钮实现了语言切换.这在Android中并不简单,但可以做到.有两个主要问题:1)更改语言环境不会更改系统配置 - 系统区域设置.例如,在您的应用中将语言更改为法语并不会改变您的设备设置的事实,例如英语.因此,在您的应用程序中的任何其他配置更改 - 方向,键盘隐藏等,应用程序的区域设置将返回到系统区域设置.2)另一个问题是,更改应用程序中的区域设置不会刷新UI,也不会重绘视图.这使得在运行时很难切换.刷新/重新加载必须手动完成,这意味着必须有一个方法使用本地化的文本/消息/值刷新每个视图.
因此,首先您需要定义本地化资源:value,value-en,value-fr等.然后,这将是按下按钮按下的代码.
private Locale myLocale;
private void onFR_langClicked(View v){
myLocale = new Locale("fr");
// set the new locale
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
// refresh UI - get values from localized resources
((RadioButton) findViewById(R.id.butn1)).setText(R.string.butn1);
((RadioButton) findViewById(R.id.butn2)).setText(R.string.butn2);
spin.setPromptId(R.string.line_spinner_prompt);
...
}
Run Code Online (Sandbox Code Playgroud)
最好将两个步骤分开两个方法:一个用于切换调用UI刷新的语言环境.
然后,您还需要处理配置更改,并确保语言保持您的意图.谷歌建议不要自己处理配置更改.清单必须包含每个活动:
<activity
android:name=". ..."
android:configChanges="locale|orientation|keyboardHidden" >
Run Code Online (Sandbox Code Playgroud)
它允许您定义自己的更改处理程序:
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
if (myLocale != null){
newConfig.locale = myLocale;
Locale.setDefault(myLocale);
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.希望你理解这个原理.
| 归档时间: |
|
| 查看次数: |
12931 次 |
| 最近记录: |