android 7.0以上多语言切换

最近在做的软件要做多语言切换,发现一系列问题,在此记录一下:

第一、简体和繁体转换。

有必要提供繁体翻译,如果不提供的话如何用户系统设置为繁体的情况下就会显示英文,这样对用户很不友好。其实转换一下很简单。

使用这个工具 http://www.hao123.com/haoserver/jianfanzh.htm , 直接把strings.xml内容直接复制上去点击转换就可以了。

第二、app语言设置和切换。

这个问题网上有很多答案,不过发现都有问题。resources.updateConfiguration(conf, dm)方法是已经过时了,在高版本系统中不生效。正确的方法是通过重写Application类和Activity类的

attachBaseContext方法。注意是所有Activity类都要重写,最好是通过BaseActivity继承。


@Override

protected void attachBaseContext(Context newBase) {

Context context = LangContextWrapper.wrap(newBase, AppConfig.getLocale());

super.attachBaseContext(context);

}

LangContextWrapper的内容:

public class LangContextWrapper extends ContextWrapper {

    public LangContextWrapper(Context base) {
        super(base);
    }

    public static Context wrap(Context context, Locale newLocale) {

        Resources res = context.getResources();
        Configuration configuration = res.getConfiguration();

        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
            configuration.setLocale(newLocale);

            LocaleList localeList = new LocaleList(newLocale);
            LocaleList.setDefault(localeList);
            configuration.setLocales(localeList);

            context = context.createConfigurationContext(configuration);

        } else {
            configuration.setLocale(newLocale);
            context = context.createConfigurationContext(configuration);

        }
        return context;
    }
}

注意网上给个答案是最后一行是return new LangContextWrapper(context) ,这样在Application中使用时,如果使用了其他三方软件的初始化方法比如说极光IM的JMessageClient.init()方法,就可能出现强制转换异常问题。

设置所需语言,这里仅供参考:

 public static Locale getLocale() {
        if (me().followSystem) {
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
                return LocaleList.getDefault().get(0);
            } else {
                return Locale.getDefault();
            }
        }
        return Locale.CHINA;
    }
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2018高考志愿百问百答来袭!你所关心的热点答疑都在“浙”里~(三) 艺术类志愿填报及投档录取 1.高考艺术类录取...
    _Lily_阅读 239评论 0赞 0
  • 现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边...
    予汐阅读 279评论 0赞 0
  • 2018高考志愿百问百答来袭!你所关心的热点答疑都在“浙”里~(一) 金华教育今天 填报志愿前先了解这些 ...
    _Lily_阅读 218评论 0赞 0
  • 让你真正感到疲惫的 是那些不开心的回忆和不确定的将来 回忆如影随形 将来躲避不开 二者相伴 让你每天都是深深的无力感
    哀慕熙荣阅读 90评论 0赞 1
  • InnoDB体系架构 InnoDB的存储引擎体系结构如下图所示,从图中可知,InnoDB存储引擎有多个内存块,可以...
    Jerry_dong阅读 576评论 0赞 0

友情链接更多精彩内容