Android 应用程序区域设置在 Play 商店发布时不起作用
Android App Locale Not Working on Play Store Release
我正在按一个按钮更改应用程序区域设置。在 API 30.
的实际设备上,它在 AVD 以及调试和发布构建 APK 上运行完美
但是,一旦发布,它就无法与该应用程序的 Play 商店版本一起使用。语言环境永远不会改变。
请帮忙!谢谢!
这是 SettingsFragment 中的代码:
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();
}
一旦按下按钮,上面的代码就会被调用,并且选择会被放入共享首选项中。 activity 得到刷新,主要 activity 加载,但语言环境从未更改。
这是我的 MainActivity 的样子:
@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());
}
请提出任何想法、建议和解决方案!再次感谢!
新 App Bundle 格式更新
Google 引入了一种新的 App Bundle 格式,可以在客户端设备上安装 apk 文件时将其拆分为更小的文件。但是,这意味着我们不能在我们的应用程序中进行动态语言更改。
为了防止这种分裂,我们需要在 app 文件夹内的 build.gradle 文件中添加额外的行,如下所示。
android {
//...
//... removed for brevity
bundle {
language {
enableSplit = false
}
}
}
我正在按一个按钮更改应用程序区域设置。在 API 30.
的实际设备上,它在 AVD 以及调试和发布构建 APK 上运行完美但是,一旦发布,它就无法与该应用程序的 Play 商店版本一起使用。语言环境永远不会改变。
请帮忙!谢谢!
这是 SettingsFragment 中的代码:
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();
}
一旦按下按钮,上面的代码就会被调用,并且选择会被放入共享首选项中。 activity 得到刷新,主要 activity 加载,但语言环境从未更改。
这是我的 MainActivity 的样子:
@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());
}
请提出任何想法、建议和解决方案!再次感谢!
新 App Bundle 格式更新
Google 引入了一种新的 App Bundle 格式,可以在客户端设备上安装 apk 文件时将其拆分为更小的文件。但是,这意味着我们不能在我们的应用程序中进行动态语言更改。
为了防止这种分裂,我们需要在 app 文件夹内的 build.gradle 文件中添加额外的行,如下所示。
android {
//...
//... removed for brevity
bundle {
language {
enableSplit = false
}
}
}