屏幕旋转后,我的应用程序的语言将被更改

Bob*_*obs 13 android localization screen rotation internationalization

我已经创建了一个双语(有两种语言)的android应用程序.我已将资源字符串插入两个文件中:

For Persian language (default)
values/strings_locale.xml?

For English language 
values-en/strings_locale.xml?
Run Code Online (Sandbox Code Playgroud)

我第一次启动Activity我插入了以下代码:

Configuration c = new Configuration(this.getResources().getConfiguration());
c.locale = new Locale("fa_IR");

this.getResources().updateConfiguration(c, this.getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)

因此,在此代码之后,我的默认语言将是波斯语,并且所有活动中的所有字符串都以波斯语正确显示.

但问题是当设备的屏幕旋转时,所有字符串都以英语显示,并且所有其他活动也会出现!我必须关闭并重新打开我的申请.

为什么会发生这种情况以及如何解决这个问题?

vil*_*e89 26

你可以创建扩展的类Application.在那里,您可以覆盖每次更改配置时调用的一个方法(例如,当屏幕方向发生变化时).

就像是:

public class MyApplication extends Application {
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        setLocale();
    }

    private void setLocale() {
        Locale locale = new Locale("fa_IR");
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,
              getBaseContext().getResources().getDisplayMetrics());
    }
}
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在清单中声明它:Application类的示例

在AndroidManifest.xml中:

<application
    android:name="com.blaablaa.bumbam.MyApplication"
    ...
Run Code Online (Sandbox Code Playgroud)