android - 在 Android 8 上更改我的应用程序中的语言
问题描述
我无法在 Android 8.0 上将我的应用程序更改为另一种语言
我的代码: 应用程序类
class MyApplication : Application() {
companion object {
fun changeLanguage(context: Context, lang: String) {
Log.e(context.packageName, lang)
val locale = Locale(lang)
Locale.setDefault(locale)
val config = context.resources.configuration
config.setLocale(locale)
context.createConfigurationContext(config)
context.resources.updateConfiguration(config, context.resources.displayMetrics)
val sharedPreference = PreferenceManager.getDefaultSharedPreferences(context)
sharedPreference.edit().putString("lang", lang).apply()
}
}
override fun onCreate() {
super.onCreate()
val sharedPreference = PreferenceManager.getDefaultSharedPreferences(this)
val lang = sharedPreference.getString("lang", "en")
changeLanguage(this, lang)
}
}
MainActivity 类
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val sharedPreference = PreferenceManager.getDefaultSharedPreferences(this)
val lang = sharedPreference.getString("lang", "en")
if (lang == "en") {
switchLanguage.setText(R.string.english)
} else {
switchLanguage.setText(R.string.viet)
}
switchLanguage.isChecked = lang != "en"
switchLanguage.setOnCheckedChangeListener { _, b ->
if (!b) {
MyApplication.changeLanguage(baseContext, "en")
} else {
MyApplication.changeLanguage(baseContext, "vi")
}
finish()
startActivity(intent)
}
}
}
对不起我的英语
解决方案
推荐阅读
- json - 使用带有 Unity IL2CPP 脚本后端的 JsonConvert.SerializeObject 的问题
- objective-c - 使用 @property 定义变量和在目标 c 中实现之间的区别
- mysql - SQL 内连接与 Sum
- javascript - JavaScript - 将 if 语句应用于节点列表/多个元素,而不仅仅是一个
- java - Retrofit 不会在 Android 的 PHP 后端将 Java 对象作为 POST 参数传递
- angularjs - 格式化表单域
- mongodb - MongoDB 聚合 + $match + $group + 数组
- reactjs - 将文本转换为大写的 Mutator
- python - Python-查找给定列表的邻居数量
- amazon-web-services - 将 Mechanical Turk 边界框转换为 JSON 以进行对象检测