多语言android应用程序问题

多语言android应用程序问题,android,Android,目前我正在使用此代码更改我的应用程序的语言,但它只在一个活动中有效,而不是在整个活动中有效,我如何使其更改整个活动的语言?& @覆盖 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_语言); 喷丝器喷丝器1=(喷丝器)findViewById(R.id.spinner1); spinner1.setOnItemSelectedLi

目前我正在使用此代码更改我的应用程序的语言,但它只在一个活动中有效,而不是在整个活动中有效,我如何使其更改整个活动的语言?&

@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_语言);
喷丝器喷丝器1=(喷丝器)findViewById(R.id.spinner1);
spinner1.setOnItemSelectedListener(新的OnItemSelectedListener(){
已选择公共视图(AdapterView父视图、视图、,
内部位置,长id){
如果(位置==1){
Toast.makeText(parent.getContext(),
“您已选择中文简体", 吐司,长度(短)
.show();
setLocale(“zh”);
}否则如果(位置==2){
Toast.makeText(parent.getContext(),
“你选择了印地语”,吐司。长度(短)
.show();
setLocale(“hi”);
}否则如果(位置==3){
Toast.makeText(parent.getContext(),
“你选择了英语”,吐司。长度(短)
.show();
设置语言环境(“en”);
}
}
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
}
公共void setLocale(字符串lang){
Resources res=getResources();
DisplayMetrics dm=res.getDisplayMetrics();
Configuration=res.getConfiguration();
如果(!conf.locale.getLanguage().equals(lang)){
conf.locale=新的语言环境(lang);
res.updateConfiguration(conf,dm);
意图刷新=新意图(此,LanguageActivity.class);
星触觉(刷新);
完成();
}
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
//在此刷新您的视图
super.onConfigurationChanged(newConfig);
}
}

您可以在应用程序类中使用静态方法设置默认区域设置,并从应用程序中的每个类调用它:

应用程序:

public class MyApplication extends Application {

    ...

    @Override
    public void onCreate() {
      ...
    }

    public static void setLocale(String lang){
        Locale defaultLocation;
        defaultLocation = new Locale(land);
        Locale.setDefault(defaultLocation);
    }

}
活动:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_language);
    Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> parent, View view,
                                   int pos, long id) {

            if (pos == 1) {

                Toast.makeText(parent.getContext(),
                        "You have selected 中文简体", Toast.LENGTH_SHORT)
                        .show();
                MyApplication.setLocale("zh");
            } else if (pos == 2) {

                Toast.makeText(parent.getContext(),
                        "You have selected Hindi", Toast.LENGTH_SHORT)
                        .show();
                MyApplication.setLocale("hi");
            } else if (pos == 3) {

                Toast.makeText(parent.getContext(),
                        "You have selected English", Toast.LENGTH_SHORT)
                        .show();
                MyApplication.setLocale("en");
            }

        }

        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }

    });
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_语言);
喷丝器喷丝器1=(喷丝器)findViewById(R.id.spinner1);
spinner1.setOnItemSelectedListener(新的OnItemSelectedListener(){
已选择公共视图(AdapterView父视图、视图、,
内部位置,长id){
如果(位置==1){
Toast.makeText(parent.getContext(),
“您已选择中文简体“,吐司。长度(短)
.show();
MyApplication.setLocale(“zh”);
}否则如果(位置==2){
Toast.makeText(parent.getContext(),
“你选择了印地语”,吐司。长度(短)
.show();
MyApplication.setLocale(“hi”);
}否则如果(位置==3){
Toast.makeText(parent.getContext(),
“你选择了英语”,吐司。长度(短)
.show();
MyApplication.setLocale(“en”);
}
}
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
}

Try change Resources res=getResources();=>getApplicationContext().getResources()。@tinysunlight先生,您的意思是将其更改为Resources res=getApplicationContext().getResources();?如果是,它仍然无法解决我的第二个问题,应用主题自动更改为黑白主题。updateConfiguration(conf,dm);=>res.updateConfiguration(conf,null);@tinysunlight先生,它仍然无法解决我的问题。.对于您的代码,我尝试在java中组合它,但失败了,我必须将“扩展应用程序”更改为“扩展活动”,然后我编译应用程序,它确实显示“您选择了语言”",但它不会改变我的应用程序的任何语言,也许我不理解你教我的内容,希望你不要介意。每个android应用程序都有一个应用程序。此类是需要维护全局应用程序状态的基类。此应用程序在清单文件中声明。应用程序中的属性和方法可见在这个应用程序中。你只需要调用静态方法“MyApplication.setLocale(“en”);”。我不知道这样做是否正确,但我认为它是有效的。对不起,你的意思是我必须为“MyApplication”创建一个新类,并且活动代码替换为我当前的活动代码吗?对不起,我在Android中真的是新手。。
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_language);
    Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> parent, View view,
                                   int pos, long id) {

            if (pos == 1) {

                Toast.makeText(parent.getContext(),
                        "You have selected 中文简体", Toast.LENGTH_SHORT)
                        .show();
                MyApplication.setLocale("zh");
            } else if (pos == 2) {

                Toast.makeText(parent.getContext(),
                        "You have selected Hindi", Toast.LENGTH_SHORT)
                        .show();
                MyApplication.setLocale("hi");
            } else if (pos == 3) {

                Toast.makeText(parent.getContext(),
                        "You have selected English", Toast.LENGTH_SHORT)
                        .show();
                MyApplication.setLocale("en");
            }

        }

        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }

    });
}