pgs*_*rom 25 resources android localization
所以我的应用程序中有一个语言设置.当语言切换时,我希望所有的文本视图等立即改变语言.目前我只是更改配置中的语言环境,因此当用户重新启动活动时语言已更改.
我的问题的一个丑陋的解决方案是每次语言更改时使每个textview加载新资源.有更好的解决方案吗?也许是一种巧妙的方式来离散地重启活动?或者只是强制重新加载资源?
Jim*_*ler 17
在AndroidManifest.xml中,将此属性添加到您的Activity中
android:configChanges="locale"
Run Code Online (Sandbox Code Playgroud)
在您的活动覆盖中 onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig) {
// refresh your views here
super.onConfigurationChanged(newConfig);
}
Run Code Online (Sandbox Code Playgroud)
https://developer.android.com/guide/topics/manifest/activity-element.html#config
我认为问题是在运行时为应用程序切换语言并在UI中显示本地化消息.如果在应用程序运行时更改了系统区域设置(在设备设置中),而不是在应用程序代码中更改区域设置时android:configChanges="locale"调用onConfigurationChanged,我想这是您想要完成的.这就是为什么它不令人耳目一新.
这是我在每个活动onCreate()或onResume()期间使用的方法,具体取决于我的需要(如果我的活动将在用户更改语言设置后恢复,或者将始终使用已设置的语言创建):
从那里我只是手动或从onConfigurationChanged()刷新视图,该方法在此方法完成后调用.
public static void changeLocale(Activity activity, String language)
{
final Resources res = activity.getResources();
final Configuration conf = res.getConfiguration();
if (language == null || language.length() == 0)
{
conf.locale = Locale.getDefault();
}
else
{
final int idx = language.indexOf('-');
if (idx != -1)
{
final String[] split = language.split("-");
conf.locale = new Locale(split[0], split[1].substring(1));
}
else
{
conf.locale = new Locale(language);
}
}
res.updateConfiguration(conf, null);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38167 次 |
| 最近记录: |