该应用程序不会在牛轧糖上获得本地化更改效果 api 7 ++

The app doesn't get the localization change effect on nougat api 7 ++

我的spinner有一个自定义适配器:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item) {

      .............

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    adapter.add(context.getResources().getString(R.string.value1));
    adapter.add(context.getResources().getString(R.string.value2));
    adapter.add(context.getResources().getString(R.string.hint));
    spinner.setAdapter(adapter);

除列表适配器外,其他所有功能都按预期工作,当我更改应用程序语言时,所有功能都获得了语言更改效果,但列表适配器没有。

我有这两种语言的资源。

我正在通过此方法更改语言:

public  void setLocale(String lang) {
    Locale myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);

}

我在像 lolipop 这样的低端设备上测试过后,它也能正常工作,android oreo 8.0 的当前问题。

因为 conf.locale = myLocale; 在 API 级别 24 中被弃用。

所以我没有直接使用conf.locale = myLocale;。使用 getLocales()setLocales(LocaleList)。如果仅需要主要语言环境,getLocales().get(0) 现在是首选访问器。

另外 updateConfiguration 在 API 级别 25 中被弃用,我使用 createConfigurationContext (Configuration overrideConfiguration) 代替。

但是没有用,我是不是漏掉了什么?

此问题在将 Activity context 而不是 applicationContext 传递给 spinnerAdapter 后得到解决。

只是我把spinnerAdapter = new SpinnerAdapter(getApplicationContext());改成了 spinnerAdapter = new SpinnerAdapter(MainActivity.this);

A REF.