Bạn có thể mở rộng Lớp ứng dụng (bạn cũng phải khai báo lớp này trong tệp kê khai) và đặt thứ gì đó như thế này vào đó.
Bất cứ khi nào bạn muốn thay đổi ngôn ngữ mà bạn có thể gọi tới
((App)getApplicationContext()).changeLang(lang);
từ bên trong hoạt động của bạn. R.string.locale_lang chỉ là một khóa được lưu trữ trong strings.xml cho các tùy chọn được chia sẻ
public class App extends Application {
private Locale locale = null;
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (locale != null) {
Locale.setDefault(locale);
Configuration config = new Configuration(newConfig);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
@Override
public void onCreate() {
super.onCreate();
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
String lang = settings.getString(getString(R.string.locale_lang), "");
changeLang(lang);
}
public void changeLang(String lang) {
Configuration config = getBaseContext().getResources().getConfiguration();
if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) {
Editor ed = PreferenceManager.getDefaultSharedPreferences(this).edit();
ed.putString(getString(R.string.locale_lang), lang);
ed.commit();
locale = new Locale(lang);
Locale.setDefault(locale);
Configuration conf = new Configuration(config);
conf.locale = locale;
getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics());
}
}
public String getLang(){
return PreferenceManager.getDefaultSharedPreferences(this).getString(this.getString(R.string.locale_lang), "");
}
}
Bạn có thể rõ ràng hơn không? Bạn muốn ngôn ngữ thay đổi dựa trên cài đặt ứng dụng thay vì cài đặt ngôn ngữ thiết bị? –
Có, tôi muốn ngôn ngữ ứng dụng thay đổi dựa trên cài đặt ứng dụng. –