gpt4 book ai didi

android语言环境随机更改回默认值

转载 作者:可可西里 更新时间:2023-11-01 19:06:05 26 4
gpt4 key购买 nike

我有一项 Activity ,在 onCreate 中我从首选项加载语言并设置这样的语言环境:

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

String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);

Configuration config = new Configuration();
config.locale = newLocale;

final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}

我也覆盖 onConfigurationChanged

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

String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);

Configuration config = new Configuration();
config.locale = newLocale;

final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}

我在 Android 2.3.7 上有一个带有 FragmentPagerAdapter 的 ViewPager 和三个选项卡。问题是,有时在切换选项卡时,应用程序的语言环境会恢复为英语,因此 UI 从现在开始具有混合语言。我总是在适配器的 getItem() 方法中为选项卡创建新 fragment 。如果我旋转设备,语言环境将再次正确。

我也试过将 android:configChanges="locale"放在 list 中而不覆盖 onConfigurationChanged(),但结果是一样的。

最糟糕的是,它不是 100% 可重现的,它只发生过几次,我也收到了用户关于此的报告。一旦应用程序启动并且它在切换几个选项卡后不更改区域设置,那么它会正确直到退出。

最佳答案

一段时间后,我想出了一个办法。对我有用的唯一解决方案始终是在主 Acitivity 的 onCreate()、每个 Fragment 的 onCreateView()、每个 BroadcastReceiver() 的 onReceive() 中(如果它加载了一些资源)以及每个服务的开始设置语言环境。为此,我在我的主要且唯一的 Activity 中创建了一个静态方法 setLocale() 。如果您有更多 Activity ,可以将其放置在自定义应用程序类中。

最后一件事。如果直接从 IDE 启动应用程序进行调试,即使这样有时也不起作用。别担心,如果它在设备上正常运行,它就可以工作(至少对我而言)。

public static void setLocale(Context context) {
final String lang = PreferenceManager.getDefaultSharedPreferences(context).getString("locale", "en");
final Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);
final Configuration config = new Configuration();
config.locale = newLocale;

final Resources res = context.getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}

关于android语言环境随机更改回默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10139079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com