第三方 Activity 库适配指南(V1.0.9后已不再需要适配) - RebornQ/Plugin-Locale-Kotlin GitHub Wiki

我们知道,除了官方的 AppCompatActivity 外,还有一些优秀开发者写的Activity库,比如drakeetAbsAboutActivity

这时候我们要继承这些Activity做自己的处理的时候,继承了其他Activity就没法继承BaseLocaleAppCompatActivity了呀!那怎么办呢?

别急,下面是适配指南~

举例适配drakeetAbsAboutActivity,加入以下内容:

abstract class TestActivity : AbsAboutActivity() {

    private var recreateActivityReceiver: RecreateActivityReceiver? = null

    override fun attachBaseContext(newBase: Context) {
        super.attachBaseContext(LocaleManageUtil.updateContext(newBase))
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 使用广播实现不重启到 LauncherActivity 只需 recreate() 即可刷新 Resources
        recreateActivityReceiver = RecreateActivityReceiver(this)
        registerReceiver(recreateActivityReceiver, recreateActivityReceiver!!.getDefaultIntentFilter())
    }

    // 防止 Locale 被一个新的 Configuration 对象覆盖掉(AppCompat库1.1.0-alpha03以上版本)
    override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
        if (overrideConfiguration != null) {
            overrideConfiguration?.setLocale(LocaleManageUtil.getSetLocale())
        }
        super.applyOverrideConfiguration(overrideConfiguration)
    }

    override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(recreateActivityReceiver)
    } 
}

对于切换语言后一定不在返回栈中的Activity,不必做适配。 这是因为App内所有界面共享同一个Locale,切换后Locale变了,新启动的Activity用上新的Context已经是切换后的Locale。所以其实返回栈中的Locale也变了,只是界面资源没有刷新。