当在微调器中选择一个新项目时,我正在尝试更改我的 Activity 的语言(只是 Activity 而不是整个应用程序)。微调器包含代表我想要切换的语言的文本(法语、英语等)
在我的 res 文件夹中,我在正确的文件夹中为每种语言都有单独的 strings.xml,即法语的 values-fr。在微调项发生变化时,如何从相应的正确 strings.xml 加载?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<String> languages = new ArrayList<String>();
languages.add("English");
languages.add("French");
Spinner spinner = (Spinner)findViewById(R.id.spinner);
spinner.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, languages));
spinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> arg0, View v, int position, long arg3) {
Log.v("Value", "Language Value: " + position);
if(position == 0){
//Change text to English
}
else{
//Change text to French
}
}
最佳答案
private void setLocale(String localeCode){
Locale locale = new Locale(localeCode);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
在 AndroidManifest.xml 中的 Activity 标签中
android:configChanges="locale"
所以你的 onItemSelected() 方法应该是这样的:
@Override
public void onItemSelected(AdapterView<?> arg0, View v, int position, long arg3) {
Log.v("Value", "Language Value: " + position);
if(position == 0){
setLocale("en");
}
else{
setLocale("fr");
}
}
我的回答基于:
关于java - 在 Spinner 更改时加载不同的 strings.xml 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7305928/