在负载变化的微调不同的strings.xml资源 [英] Load different strings.xml resource on Spinner change

查看:96
本文介绍了在负载变化的微调不同的strings.xml资源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在试图改变我的活动的语言时,一个新的项目是微调内选择(只是不活动的整个应用程序)。微调器包含文本重新presenting的语言我想通过(法语,英语等)

切换

在我的res文件夹我在正确的文件夹,即值-FR法语每种语言单独的strings.xml。哪有我,在微调项目的变化,从正确的strings.xml对应?负载

  @覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);    ArrayList的<串GT;语言=新的ArrayList<串GT;();
    languages​​.add(英语);
    languages​​.add(法国);    微调微调=(微调)findViewById(R.id.spinner);
    spinner.setAdapter(新ArrayAdapter<串GT;(这一点,android.R.layout.simple_spinner_dropdown_item,语言));
    spinner.setOnItemSelectedListener(本);
}@覆盖
公共无效onItemSelected(适配器视图<>为arg0,视图V,INT位置,长ARG3){
    Log.v(价值,语言值:+位置);
    如果(位置== 0){
         //改变文本英语
    }
    其他{
        //更改文本到法国
    }
}


解决方案

 私人无效的setLocale(string地区code){
    区域设置区域=新区域(区域code);
    Locale.setDefault(区域);
    配置配置=新配置();
    config.locale =区域;
    。getBaseContext()getResources()updateConfiguration(。配置,getBaseContext()getResources()getDisplayMetrics());
}

在AndroidManifest.xml中的活动标签

 的android:configChanges =语言环境

所以,你onItemSelected()方法应该是这样的:

  @覆盖
公共无效onItemSelected(适配器视图<>为arg0,视图V,INT位置,长ARG3){
    Log.v(价值,语言值:+位置);
    如果(位置== 0){
         的setLocale(EN);
    }
    其他{
         的setLocale(FR);
    }
}

我的答案是基于:


  1. 如何强制语言Android应用程序


  2. <一个href=\"http://stackoverflow.com/questions/2264874/android-changing-locale-within-the-app-itself\">Android :应用程序本身内改变区域设置


I am am trying to change the language of my activity (just the activity not the whole app) when a new item is selected within a spinner. The spinner contains Text representing the language I would like to switch through (French, English etc.)

In my res folder I have separate strings.xml for each language in the correct folders i.e. values-fr for French. How can I, on the changing of the spinner item, load from the correct strings.xml which corresponds?

@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());
}

in AndroidManifest.xml in activity tag

android:configChanges="locale"

So your onItemSelected() method should look like this:

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

My answer is based on:

  1. how to force language in android application

  2. Android : changing Locale within the app itself

这篇关于在负载变化的微调不同的strings.xml资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆