背景
在不同的国际化环境中弹出不同语言的toast提示,但是在内部切换语言的Locale之后,部分的toast 依旧是显示旧的语言?!这个是怎么回事呢?
探索
原有的toast逻辑: ToastUtils.showCenterToast(R.string.room_login_name_tip)
binding.joinRoomName.addTextChangedListener(object : SimpleTextWatcher() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
// 要求文本输入大于限制的最大长度后弹出toast提示
s?.let {
if(s.length >= MAX_INPUT_NAME_LENGTH) {
ToastUtils.showCenterToast(R.string.room_login_name_tip)
}
}
}
override fun afterTextChanged(s: Editable) {
binding.joinEntranceMain.isEnabled =
s.isNotBlank() && binding.joinRoomId.text.isNotBlank()
}
})
更改后的代码: ToastUtils.showCenterToast(getString(R.string.room_login_name_tip))
binding.joinRoomName.addTextChangedListener(object : SimpleTextWatcher() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
// 要求文本输入大于限制的最大长度后弹出toast提示
s?.let {
if(s.length >= MAX_INPUT_NAME_LENGTH) {
ToastUtils.showCenterToast(getString(R.string.room_login_name_tip))
}
}
}
override fun afterTextChanged(s: Editable) {
binding.joinEntranceMain.isEnabled =
s.isNotBlank() && binding.joinRoomId.text.isNotBlank()
}
})
差异无非就是getString
,直接根据当前的content的语言环境选中指定的R.String.xxx
的id之后获取不同环境的文件夹下的文本。而不是采用默认的id和默认的文件夹。
以上是自己的理解,欢迎大佬指正
参考