android - 如何使用 Kotlin 在 android 应用程序中支持包括 RtL 在内的多语言?
问题描述
private fun setLocale(lang: String) {
val language = Locale(lang)
val res: Resources = resources
val dm: DisplayMetrics = res.displayMetrics
val conf: Configuration = res.configuration
conf.locale = language
res.updateConfiguration(conf, dm)
val refresh = Intent(this, LoginActivity::class.java)
startActivity(refresh)
finish()
}
大家好!
我正在创建一个 android 应用程序,这是为阿拉伯人准备的。我已经为 "en" 和 "ar" xml创建了字符串资源,并在 Mainfest.xml 中声明了它android:supportsRtl="true"
。
当我使用此代码转换应用程序语言时,它只转换文本。无需转换布局方向、文本方向和文本对齐方式。
- 此代码包含
.locale
和.updateConfiguration
作为 java 代码。您能帮我如何清理整个代码以 适合kotlin 代码吗? - 你能帮我解决 RtL 问题,使应用程序更专业和准确吗?
解决方案
要使布局更改方向遵循语言添加:
setLayoutDirection()
从 View类window.decorView
setLayoutDirection()
从配置类res.configuration
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { res.configuration.setLayoutDirection(language) window.decorView.layoutDirection = if (rtl) View.LAYOUT_DIRECTION_RTL else View.LAYOUT_DIRECTION_LTR }
在上面的代码片段中,请确保替换if(rtl)
为 RTL 条件,例如if (language == "ar")
您可以在活动中调用此代码onCreate()
,也可以在您的setLocale()
方法中对其进行测试
推荐阅读
- jenkins-pipeline - 在声明性 Jenkinsfile 中首先运行脚本以使用扩展选择参数插件
- sql - 使用来自不同表的 where 字段更新表
- powershell - 如何使用“Shift + Right Click”以其他用户身份启动 *.ps1 文件?
- html - 如果我没有看到客户出现的错误,如何对 html 电子邮件模板进行故障排除?
- javascript - Express - 无法连接到 MongoDB 服务器
- java - Spring Boot @ControllerAdvice + @Transactional 无法按预期工作
- tensorflow - 如何在 Windows 10 上安装 CUDA 分析工具界面
- python - dask worker 如何访问集群中当前的 worker 总数?
- python - pandas 中的 for 循环真的很糟糕吗?我什么时候应该关心?
- react-native - 如何在表单字段中添加占位符和多行文本输入?反应原生