Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';t根据系统设置更改我的android应用程序上的语言_Android_Locale - Fatal编程技术网

我能';t根据系统设置更改我的android应用程序上的语言

我能';t根据系统设置更改我的android应用程序上的语言,android,locale,Android,Locale,我有两个strings.xml文件,一个是default,另一个是value。问题是,无论我需要更改电话系统语言,我的应用程序字符串始终是中文。 但是,如果我使用这样的功能代码来改变语言,它是有效的 public static final String EN = "en"; public static final String ZH = "zh"; public void changeLanguage(String language) { Resources resources

我有两个strings.xml文件,一个是default,另一个是value。问题是,无论我需要更改电话系统语言,我的应用程序字符串始终是中文。 但是,如果我使用这样的功能代码来改变语言,它是有效的

 public static final String EN = "en";
 public static final String ZH = "zh";

  public void changeLanguage(String language) {
    Resources resources = mContext.getResources();
    Configuration configuration = resources.getConfiguration();
    DisplayMetrics displayMetrics = resources.getDisplayMetrics();
    if(language.equals(ZH)){
        configuration.locale = Locale.CHINESE;
    }else if(language.equals(EN)){
        configuration.locale = Locale.ENGLISH;
    }else {
        configuration.locale = Locale.ENGLISH;
        language = EN;
    }
    resources.updateConfiguration(configuration , displayMetrics);
    AbSharedUtil.putString(mContext , "language" , language);
    mContext.finish();
    Intent intent = new Intent(mContext , MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    mContext.startActivity(intent);



}
所以问题是我可以通过代码更改语言,但不能通过系统语言设置自动更改语言。

尝试使用以下代码

        Locale myLocale = new Locale("zh");
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);

请确认您没有在清单中添加参数“locale”,这将导致您的应用程序在系统区域设置更改时不会重新加载资源。

My default strings.xml为英语。我想要的是,如果我去手机设置更改语言,如英语(美国),我的应用程序也可以自动更改。但情况并非如此。无论我改变任何语言,它总是显示中文(值zh)。在条件后使用此方法。Locale.setDefault(configuration.Locale)。每个活动?当然可以。使用“区域设置”声明configChanges的每个活动都不会被销毁,也不会在区域设置更改时重新加载资源。