该应用程序不会在牛轧糖上获得本地化更改效果 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);
我的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);