4

大约一年前,我已经实现了自定义区域设置选择,但在 4.1 版本之后,用户开始抱怨不断闪烁的活动。这是我正在使用的代码(从不同的 SO 答案编译):

public final class TestApplication extends Application
{
    private Locale desiredLocale = new Locale("ru-RU");

    @Override
    public void onCreate() {
        super.onCreate();
        updateLocale(new Configuration());
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        updateLocale(newConfig);
    }

    private void updateLocale(Configuration newConfig) {
        newConfig.locale = desiredLocale;
        Locale.setDefault(desiredLocale);
        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());        
    }    
}

应用程序仅包含一个空活动,在我更改设备方向后,Android 每秒都会重新创建该活动。是样本的来源。

看起来所有使用这种技术的应用程序都变得无效了。什么是正确的方法?

4

1 回答 1

4

此行导致解决方案失败:

getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());

正确的(至少它有效)实现在这里定义 https://stackoverflow.com/a/14010044/554336

Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());

所以每次都应该创建新的配置实例。

于 2013-03-16T03:49:57.473 回答