Android 当语言(ListPreference)更改时,如何更改我的应用程序区域设置?
如何在更改语言时更改应用程序区域设置(列表首选项) 我在Android Studio中使用了自动生成的SettingsActivity,当lang_列表的listpreference更改时,我希望使用所选区域设置中的资源(字符串)。我得到了他的推荐信。调用内部setLocale()方法getResources(),这会给出错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.content.Context.getResources()”。 我已将我的设置活动粘贴在这里Android 当语言(ListPreference)更改时,如何更改我的应用程序区域设置?,android,android-studio,listpreference,Android,Android Studio,Listpreference,如何在更改语言时更改应用程序区域设置(列表首选项) 我在Android Studio中使用了自动生成的SettingsActivity,当lang_列表的listpreference更改时,我希望使用所选区域设置中的资源(字符串)。我得到了他的推荐信。调用内部setLocale()方法getResources(),这会给出错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.
最后,我在AppController中使用以下代码
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (locale != null)
{
newConfig.locale = locale;
Locale.setDefault(locale);
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
}
@Override
public void onCreate() {
super.onCreate();
// for Active Android
ActiveAndroid.initialize(this);
mInstance = this;
/*locale management*/
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Configuration config = getBaseContext().getResources().getConfiguration();
String currentLangID = sharedPreferences.getString("lang_list", "");
if(currentLangID.equals("3")) {
//ne locale
lang = "ne";
} else if (currentLangID.equals("2")) {
//ra locale
lang = "ra";
} else {
// en locale
lang = "en";
}
if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang))
{
locale = new Locale(lang);
Locale.setDefault(locale);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
在AndroidManifest.xml中
<application
android:name="org.nrum.app.AppController"
最后,我在AppController中使用以下代码
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (locale != null)
{
newConfig.locale = locale;
Locale.setDefault(locale);
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
}
@Override
public void onCreate() {
super.onCreate();
// for Active Android
ActiveAndroid.initialize(this);
mInstance = this;
/*locale management*/
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Configuration config = getBaseContext().getResources().getConfiguration();
String currentLangID = sharedPreferences.getString("lang_list", "");
if(currentLangID.equals("3")) {
//ne locale
lang = "ne";
} else if (currentLangID.equals("2")) {
//ra locale
lang = "ra";
} else {
// en locale
lang = "en";
}
if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang))
{
locale = new Locale(lang);
Locale.setDefault(locale);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
在AndroidManifest.xml中
<application
android:name="org.nrum.app.AppController"
当我打开我的应用程序时(本地根据共享首选项中的lang值),上述解决方案效果完美,但当我更改语言时,效果不会立即显现。当我打开我的应用程序时(本地根据共享首选项中的lang值),上述解决方案效果完美,但当我更改语言时,效果无法立即看到。这是的副本吗?这是的副本吗?
android:configChanges="layoutDirection|locale"