我有一个包含4种语言的android应用,即英语,印地语,古吉拉特语和马拉地语。 我的res文件夹中有4个字符串文件,当我在调试模式下直接将代码运行到设备上时,效果很好。但是,当我签署apk并将其发布到playstore上并尝试下载时,它不起作用。
这是我用于设置语言环境的代码:
public class BaseActivity extends AppCompatActivity {
public SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
String lang = sharedpreferences.getString("lang","en");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : "+lang);
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
我将此BaseActivity扩展到我使用的所有活动。 因此,我无法弄清为什么它在调试中可以正常工作,而在签名的apk中却不能正常工作。
答案 0 :(得分:1)
使用
getApplicationContext().getResources().updateConfiguration(config,
getApplicationContext().getResources().getDisplayMetrics());
代替
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
因为
getApplicationContext()-返回所有活动的上下文 在应用程序中运行。
和
getBaseContext()-如果要从另一个上下文访问上下文 在您可以访问的应用程序中。