在 android 中更改语言时如何更改操作栏语言
How to change action bar language when language is changed in android
我创建了一个有权更改语言的应用程序。我使用 SharedPreference
来存储更改后的语言。然后我用它来换语言。
这些是我的步骤,
public class SaveSharedPreference {
static final String PREF_LANGUAGE="language";
static SharedPreferences getSharedPreferences(Context ctx) {
return PreferenceManager.getDefaultSharedPreferences(ctx);
}
public static void setLanguage(Context context,String language){
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
editor.putString(PREF_LANGUAGE,language);
editor.commit();
}
public static String getLaguage(Context context){
return getSharedPreferences(context).getString(PREF_LANGUAGE,"");
}
}
这个 SaveSharedPreference class 帮助我存储和获取更改后的语言。
更改语言后,我使用以下步骤获取和放置更改后的语言。
if (SaveSharedPreference.getLaguage(context).length()!=0) {
if(SaveSharedPreference.getLaguage(context).toString().equals("si")){
String languageToLoad = SaveSharedPreference.getLaguage(context); // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
} else {
String languageToLoad = SaveSharedPreference.getLaguage(context).toString(); // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
} else {
String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
我把它放在 onResume() 方法上。
@Override
protected void onResume() {
super.onResume();
}
这些是我的 string.xml 语言文件,
values\strings.xml
<resources>
<string name="label_dash_board_name">My dashboard</string>
</resources>
si\strings.xml
<resources>
<string name="label_dash_board_name">දත්ත පුවරුව</string>
</resources>
我在更改语言后遇到了问题。我可以在 EditTexts
、TextViews
和 Buttons
中更改语言。但我无法更改操作栏中的语言。
当我关闭并再次启动应用程序时,我可以看到语言发生了变化。
有什么想法吗?
setTitle 方法可能适合您---
setContentView(R.layout.activity_main);
// Activity title will be updated after the locale has changed in Runtime
setTitle(R.string.app_name);
我创建了一个有权更改语言的应用程序。我使用 SharedPreference
来存储更改后的语言。然后我用它来换语言。
这些是我的步骤,
public class SaveSharedPreference {
static final String PREF_LANGUAGE="language";
static SharedPreferences getSharedPreferences(Context ctx) {
return PreferenceManager.getDefaultSharedPreferences(ctx);
}
public static void setLanguage(Context context,String language){
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
editor.putString(PREF_LANGUAGE,language);
editor.commit();
}
public static String getLaguage(Context context){
return getSharedPreferences(context).getString(PREF_LANGUAGE,"");
}
}
这个 SaveSharedPreference class 帮助我存储和获取更改后的语言。
更改语言后,我使用以下步骤获取和放置更改后的语言。
if (SaveSharedPreference.getLaguage(context).length()!=0) {
if(SaveSharedPreference.getLaguage(context).toString().equals("si")){
String languageToLoad = SaveSharedPreference.getLaguage(context); // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
} else {
String languageToLoad = SaveSharedPreference.getLaguage(context).toString(); // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
} else {
String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
我把它放在 onResume() 方法上。
@Override
protected void onResume() {
super.onResume();
}
这些是我的 string.xml 语言文件,
values\strings.xml
<resources>
<string name="label_dash_board_name">My dashboard</string>
</resources>
si\strings.xml
<resources>
<string name="label_dash_board_name">දත්ත පුවරුව</string>
</resources>
我在更改语言后遇到了问题。我可以在 EditTexts
、TextViews
和 Buttons
中更改语言。但我无法更改操作栏中的语言。
当我关闭并再次启动应用程序时,我可以看到语言发生了变化。
有什么想法吗?
setTitle 方法可能适合您---
setContentView(R.layout.activity_main);
// Activity title will be updated after the locale has changed in Runtime
setTitle(R.string.app_name);