2011-09-05 36 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