里包恩第一款开源第三方库 plugin-locale 面世!!

Author Avatar
Reborn 12月 08, 2019
  • 在其它设备中阅读本文章

背景

项目历经9个月的演化,终于从一开始为宝可梦的那样记账研究的语言切换而写的Demo进化成第三方库。

这是我的第一个开源第三方库,说起来还挺激动的(嗯…失眠了…)~

使用文档

一个用 Kotlin 写的多语言切换的 Android 第三方库。

目前只支持英文/简中/繁中三种语言,需要添加其他的语言可以提交 issue 或者直接联系我。

现在我们支持任何一种语言,但是需要你自己定义你要支持的语言列表(Key 与 Value 间的关系),详情请看👉注意事项

引入依赖

(可选)项目的 build.gradle 中加入:

当 JCenter 无法链接的时候可以尝试使用

allprojects {
    repositories {
        // ...
        maven { url "https://dl.bintray.com/rebornq/maven/" }
    }
}

app.gradle 中加入:

implementation 'com.mallotec.reb:plugin-locale:{last-version}'

注意:{last-version}要替换为最新版本号,最新版本链接:https://bintray.com/rebornq/maven/plugin-locale/_latestVersion

只需三步即可食用

  1. 在 Application 中初始化

     LocalePlugin.init(this)
    

     LocalePlugin.init(this, { 刷新界面的方式 })
    

    其中{ 刷新界面的方式 }有三种:

    1. LocaleConstant.RESTART_TO_LAUNCHER_ACTIVITY: 清空栈中所有Activity并重启到LauncherActivity
    2. LocaleConstant.RECREATE_CURRENT_ACTIVITY: 重新创建当前Activity默认是这种方式,可不填写此方式可能会因为内存低无法注销广播接收器而导致内存泄漏,解决方法请查看👉常见问题或👉Wiki
    3. LocaleConstant.CUSTOM_WAY_TO_UPDATE_INTERFACE: 自定义刷新界面, 如果选这种方式的朋友请务必查看👉更多用法或👉Wiki
  2. 定义好支持的语言列表对应关系,详情请看👉注意事项,如:

     private fun getLocale(which : String): Locale {
         return when (which) {
             "0" -> Locale.ROOT  // 跟随系统
             "1" -> Locale.ENGLISH
             "2" -> Locale.SIMPLIFIED_CHINESE
             "3" -> Locale.TRADITIONAL_CHINESE
             else -> Locale.SIMPLIFIED_CHINESE
         }
     }
    
  3. 一句代码调用切换语言:

     // 应用切换的语言
     LocaleHelper.getInstance()
         .language(getLocale(which.toString()))
         .apply(this)
    

    { 刷新界面的方式 }选择了第一种LocaleConstant.RESTART_TO_LAUNCHER_ACTIVITY,请使用下面的方式:

     // 应用切换的语言
     val intent = Intent(this, TargetActivity::class.java)
     LocaleHelper.getInstance()
         .language(getLocale(which.toString()))
         .apply(this, intent)
    

    { 刷新界面的方式 }选择了第三种LocaleConstant.CUSTOM_WAY_TO_UPDATE_INTERFACE,请使用下面的方式:

    上面有写,查看👉更多用法或👉Wiki

    注意:这里的this必须是当前ActivityContextwhich是所选的语言标记,详情请看下方注意事项的对应关系

Demo

效果图:

MultiLanguageDemo-NoRestartToLaunche

更多请查看本项目的 Demo

常见问题

切换语言失效原因及解决方法


AndroidX AppCompat 库 1.1.0-alpha03 以上版本导致的 Locale 被一个新的 Configuration 对象覆盖掉

仅写出解决方法,本demo经测试无法复现问题

Activity中加入以下代码即可:
java // 防止 Locale 被一个新的 Configuration 对象覆盖掉(AndroidX AppCompat 库 1.1.0-alpha03 以上版本) override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) { overrideConfiguration?.setLocale(LocaleHelper.getInstance().getSetLocale()) super.applyOverrideConfiguration(overrideConfiguration) }

内存泄漏原因及解决方法


Activity 对象被回收时还没来得及执行 onDestroy() 方法导致没注销对应的广播接收器引发的内存泄漏

这种情况常见于内存低的时候Activity被强制回收,不走onDestroy()方法导致的。

遇到这种情况的朋友请自行判断内存低即将回收Activity的地方(onTrimMemory()?),

然后手动调用以下代码注销广播接收器:
java BroadcastReceiverManager.unregisterBroadcastReceiver(activity)

写在最后

欢迎大家 Star、Fork 和提 Issue 提 PR 呀~

项目地址:https://github.com/RebornQ/Plugin-Locale-Kotlin

Thanks

以下不分排名先后