第三方 Activity 库适配指南(V1.0.9后已不再需要适配) - RebornQ/Plugin-Locale-Kotlin GitHub Wiki
我们知道,除了官方的 AppCompatActivity 外,还有一些优秀开发者写的Activity
库,比如drakeet
的 AbsAboutActivity。
这时候我们要继承这些Activity
做自己的处理的时候,继承了其他Activity
就没法继承BaseLocaleAppCompatActivity
了呀!那怎么办呢?
别急,下面是适配指南~
举例适配drakeet
的AbsAboutActivity
,加入以下内容:
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
也变了,只是界面资源没有刷新。