Java 安卓没有';除非字符串是';首选';在设备上。有解决办法吗?

Java 安卓没有';除非字符串是';首选';在设备上。有解决办法吗?,java,android,localization,Java,Android,Localization,在我的Android应用程序中,我想让用户能够更改应用程序语言,而不管系统设置如何。我已经阅读了关于这个主题的多个教程,并得出了一个有效的解决方案。。。但前提是所有应用内语言都已经在系统的首选语言列表中。这是我说的设置屏幕: 如果我的任何应用内语言不存在,那么Android将使用默认字符串资源。有人有过同样的问题吗?有什么解决办法吗 这是我的设置: 1) 我在三个单独的文件夹(values、values en和values ru)中有三个strings.xml文件 2) 我的应用内语言助手方法

在我的Android应用程序中,我想让用户能够更改应用程序语言,而不管系统设置如何。我已经阅读了关于这个主题的多个教程,并得出了一个有效的解决方案。。。但前提是所有应用内语言都已经在系统的首选语言列表中。这是我说的设置屏幕:

如果我的任何应用内语言不存在,那么Android将使用默认字符串资源。有人有过同样的问题吗?有什么解决办法吗

这是我的设置:

1) 我在三个单独的文件夹(values、values en和values ru)中有三个strings.xml文件

2) 我的应用内语言助手方法如下所示:

@Nullable
公共静态上下文getContextLocalized(@Nullable Context){
if(上下文!=null){
配置=新配置(context.getResources().getConfiguration());
setLocale(getLocale());
返回context.createConfigurationContext(配置);
}否则{
返回null;
}
}
它基本上采用用户选择的区域设置(方法
getLocale()
并使用该区域设置创建新上下文

3) 我有三个预定义的区域设置:

新语言环境(“pl”、“pl”) 新语言环境(“en”、“GB”) 新区域设置(“ru”、“ru”) 该用户可以从中进行选择

4) 我使用
getContextLocalized()
的方式如下:

@NonNull
公共静态字符串getStringLocalized(@Nullable上下文,@StringRes int stringId,Object…args){
Context contextLocalized=getContextLocalized(上下文);
if(contextLocalized!=null){
试一试{
返回contextLocalized.getString(stringId,args);
}捕获(例外e){
Log.e(标记“getStringLocalized:ERROR”+
contextLocalized.getResources().getResourceName(stringId)+
“!”+e.getMessage());
e、 printStackTrace();
返回“错误”;
}
}
返回“NULL”;
}
这个方法就是我在片段和活动中用来提取所需字符串的方法

如果我的系统语言列表包含我的所有应用程序内语言,则此解决方案非常有效。但是,如果我从首选语言列表中删除俄语,则每当用户选择俄语作为其应用程序内语言时,我的应用程序将恢复为波兰语(存储在默认值文件夹中)

我的min SDK版本是20。我使用API26模拟器对此进行了测试

我编写了以下测试方法:

公共静态无效测试(@NonNull Context-appContext){
如果(!BuildConfig.DEBUG){
返回;
}
Resources appRes=appContext.getResources();
配置appConfig=appRes.getConfiguration();
Log.d(“LanguageUtilTest”、“DEFAULT->”+appContext.getString(R.string.cancel));
配置configEN=新配置(appConfig);
configEN.setLocale(新语言环境(“en”、“GB”));
Context contextEN=appContext.createConfigurationContext(configEN);
Log.d(“LanguageUtilsTest”、“EN->”+contextEN.getString(R.string.cancel));
配置configRU=新配置(appConfig);
configRU.setLocale(新语言环境(“ru”、“ru”));
Context contextRU=appContext.createConfigurationContext(configRU);
Log.d(“LanguageUtilTest”,“RU->”+contextRU.getString(R.string.cancel));
}
如果我的系统语言列表如下所示: 结果是:

DEFAULT -> Anuluj
EN -> Cancel
RU -> Отменить
如果我删除除波兰语(波尔斯基语)以外的所有语言。 结果是:

DEFAULT -> Anuluj
EN -> Anuluj
RU -> Anuluj
我曾尝试在我的gradle中添加
重新配置“en”、“ru”
,但没有效果

有什么建议吗