java - 在 Spinner 更改时加载不同的 strings.xml 资源

标签 java android locale

当在微调器中选择一个新项目时,我正在尝试更改我的 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");
    }
}

我的回答基于:

  1. how to force language in android application

  2. Changing Locale within the app itself

关于java - 在 Spinner 更改时加载不同的 strings.xml 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7305928/

相关文章:

c++ - 为什么 nl_langinfo(CODESET) 与语言环境字符映射不同?

java - 将 ISO3 国家/地区代码转换为整个国家/地区名称,Android

java - C# 等效于 LinkedHashMap

java - Java 中的空指针异常

android - 如何注册 Crashlytics?

java - 仍然无法创建该表。问题是什么?

android - 让 Android 保持清醒状态以接收传入的网络连接?

ruby-on-rails - ruby on Rails time_ago_in_words 不显示几秒前

java - 如何将我的 eclipse 3.7 应用程序移植到 eclipse 4.0?

java - 如何让 CountDownTimer 在 fragment 上工作?