gpt4 book ai didi

java - Android 在应用程序中更改和设置默认语言环境

转载 作者:IT老高 更新时间:2023-10-28 23:10:12 25 4
gpt4 key购买 nike

我正在致力于 Android 应用的全局化。我必须提供选项以从应用程序中选择不同的语言环境。我在我的 Activity (HomeActivity) 中使用以下代码,我提供了更改语言环境的选项

Configuration config = new Configuration();
config.locale = selectedLocale; // set accordingly
// eg. if Hindi then selectedLocale = new Locale("hi");
Locale.setDefault(selectedLocale); // has no effect
Resources res = getApplicationContext().getResources();
res.updateConfiguration(config, res.getDisplayMetrics());

只要没有像屏幕旋转这样的区域设置默认为 android 系统级别区域设置而不是代码设置的区域设置的配置更改,此方法就可以正常工作。

Locale.setDefault(selectedLocale);

我能想到的一个解决方案是使用 SharedPreferences 持久化用户选择的语言环境,并在每个 Activity 的 onCreate() 方法中将语言环境设置为持久化语言环境,因为每次配置更改都会一次又一次地调用 onCreate()。有没有更好的方法来做到这一点,这样我就不必在每个 Activity 中都这样做了。

基本上我想要的是 - 一旦我在 HomeActivity 中更改/设置为某个区域设置,我希望我的应用程序中的所有 Activity 都使用该区域设置本身,而不考虑任何配置更改......除非它被更改为应用的 HomeActivity 中提供更改语言环境的选项的其他语言环境。

最佳答案

虽然此答案中所述的解决方案适用于一般情况,但我发现自己添加到我的偏好屏幕:

 <activity android:name="com.example.UserPreferences"
android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden|screenSize">
</activity>

这是因为当应用程序处于横向模式并且首选项屏幕处于纵向模式时,更改区域设置并返回应用程序可能会导致问题。将两者都设置为横向模式可以防止这种情况发生。

一般解决方案

您需要在应用程序级别更改区域设置,以便其效果无处不在。

public class MyApplication extends Application
{
@Override
public void onCreate()
{
updateLanguage(this);
super.onCreate();
}

public static void updateLanguage(Context ctx)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
String lang = prefs.getString("locale_override", "");
updateLanguage(ctx, lang);
}

public static void updateLanguage(Context ctx, String lang)
{
Configuration cfg = new Configuration();
if (!TextUtils.isEmpty(lang))
cfg.locale = new Locale(lang);
else
cfg.locale = Locale.getDefault();

ctx.getResources().updateConfiguration(cfg, null);
}
}

然后在你的 list 中你必须写:

<application android:name="com.example.MyApplication" ...>
...
</application>

关于java - Android 在应用程序中更改和设置默认语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22402491/

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