android应用程序区域设置不适用于play store版本

t3psigkw  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(292)

我正在按一个按钮更改应用程序的区域设置。它可以完美地在AVD上运行,也可以使用api 30在实际设备上调试和发布构建APK。
但是,一旦发布,它就不能与play store版本的应用程序协同工作。区域设置从未更改。
请帮忙!非常感谢。
这是设置片段中的代码:

private void setAppLocale(Context context, String language) {
    Locale locale = new Locale(language);
    Locale.setDefault(locale);
    Configuration config = context.getResources().getConfiguration();
    config.setLocale(locale);
    context.createConfigurationContext(config);
    context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
    Intent refresh = new Intent(getActivity().getApplicationContext(), MainActivity.class);
    startActivity(refresh);
    getActivity().finish();
}

一旦按下一个按钮,就会调用上面的内容,选择也会放入共享首选项中。活动被刷新&主活动被加载,但区域设置从未更改。
我的主要活动是这样的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    hideSystemUI();

    sharedPref = getPreferences(Context.MODE_PRIVATE);
    selectedLanguage = sharedPref.getString("Test.SL.LanguageName", language);
    selectedTheme = sharedPref.getString("Test.SL.ThemeName", "Light");

    if (selectedTheme.equals("Light")){
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    } else if (selectedTheme.equals("Dark")) {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    }

    if (selectedLanguage.equals("Sinhala")) {
        language = "Sinhala";
        setAppLocale(this, "si");
    } else {
        language = "English";
        setAppLocale(this, "en");
    }

    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    setSupportActionBar(binding.appBarMain.toolbar);

       ......

}

public void setAppLocale(Context context, String language) {
    Locale locale = new Locale(language);
    Locale.setDefault(locale);
    Configuration config = context.getResources().getConfiguration();
    config.setLocale(locale);
    context.createConfigurationContext(config);
    context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}

请提供任何想法、建议和解决方案!再次感谢你!

dwthyt8l

dwthyt8l1#

更新新的应用程序包格式
谷歌推出了一种新的应用程序包格式,在客户端设备上安装apk文件时,可以将其拆分成更小的大小。然而,这意味着我们的应用程序中不能有动态的语言更改。
为了防止这种分裂,我们需要在应用程序文件夹中的build.gradle文件中添加额外的行,如下所示。

android {
    //...
    //... removed for brevity
    bundle {
        language {
            enableSplit = false
        }
    }
}

参考这篇文章

相关问题