【Android 】getString(R.string.xxx)和直接调用R.string.xxx的区别

文章讨论了在应用内部切换语言后,部分Toast提示仍然显示旧语言的问题。原有的逻辑使用R.string直接引用资源,而更改后的代码通过getString根据当前Locale获取对应语言的文本。问题可能在于切换语言后,Toast未更新其语言环境。
摘要由CSDN通过智能技术生成

背景

在不同的国际化环境中弹出不同语言的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和默认的文件夹。
在这里插入图片描述
以上是自己的理解,欢迎大佬指正
参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值