Resources and layout direction rendered incorrectly only on Android 8.0 and above

前端 未结 6 775
执念已碎
执念已碎 2020-11-29 11:06

I have a multilingual app with primary language English and secondary language Arabic.

I am calling setLocale() in the onCreate() of every

6条回答
  •  北荒
    北荒 (楼主)
    2020-11-29 11:58

    Resources.updateConfiguration is deprecated use this instead :

     fun setLocale(old: Context, locale: Locale): Context {
        val oldConfig = old.resources.configuration
        oldConfig.setLocale(locale)
        return old.createConfigurationContext(oldConfig)
    }
    
    override fun attachBaseContext(newBase: Context?) {
        super.attachBaseContext(newBase?.let { setLocale(it, Locale("ar")) })
    }
    

    In Java

    private Context setLocale(Context old, Locale locale) {
        Configuration oldConfig = old.getResources().getConfiguration();
        oldConfig.setLocale(locale);
        return old.createConfigurationContext(oldConfig);
    }
    
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(setLocale(newBase, new Locale("ar")));
    }
    

提交回复
热议问题