2011-09-05 56 views
1

当我在微调控件中选择一个新项目时,我正在尝试更改我的活动的语言(只是活动不是整个应用程序)。微调框包含代表我想要切换的语言的文本(法语,英语等)在Spinner更改中加载不同的strings.xml资源

在我的res文件夹中,我为每种语言在正确的文件夹中分别存在strings.xml,即values-fr for French。我如何才能在更改spinner项目时从正确的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 
    } 
} 

回答

4
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

在活动标签

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"); 
    } 
} 

我的答案是基于:

  1. how to force language in android application

  2. Changing Locale within the app itself

+0

我能看到这是来自但当微调项改变不改变语言。 – SamRowley

+0

检查我编辑的答案。 –

+0

不,我了解如何实际设置区域设置的一部分,但我不知道如何使用新的区域设置刷新contentView。 – SamRowley