我不知道这个问题是否已经存在,但我没有找到任何解决方案。 我在移动应用程序中有两种语言(英语和西班牙语)和日/夜主题。当我更改语言时,我的应用程序运行良好,但是当我更改主题时,语言会自动更改为默认语言。 谢谢! 代码:
class MyPreferences(context: Context?) {
companion object {
private const val DARK_STATUS = "DARK STATUS"
private const val LANGUAGE ="language"
}
private val preferences = PreferenceManager.getDefaultSharedPreferences(context)
var darkMode = preferences.getInt(DARK_STATUS, 0)
set(value) = preferences.edit().putInt(DARK_STATUS, value).apply()
var lang = preferences.getInt(LANGUAGE, 0)
set(value) = preferences.edit().putInt(LANGUAGE, value).apply()
}
fun chooseThemeDialog() {
val light:String =getString(R.string.light)
val dark:String =getString(R.string.dark)
val systemDefault:String =getString(R.string.system_default)
val builder = AlertDialog.Builder(this)
builder.setTitle(getString(R.string.theme))
val styles = arrayOf(light,dark,systemDefault)
val checkedItem = MyPreferences(this).darkMode
builder.setSingleChoiceItems(styles, checkedItem) { dialog, which ->
when (which) {
0 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
delegate.applyDayNight()
MyPreferences(this).darkMode = 0
dialog.dismiss()
}
1 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
delegate.applyDayNight()
MyPreferences(this).darkMode = 1
dialog.dismiss()
}
2 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
delegate.applyDayNight()
MyPreferences(this).darkMode = 2
dialog.dismiss()
}
}
}
val dialog = builder.create()
dialog.show()
}
fun chooseLanguageDialog() {
val english = getString(R.string.english)
val spanish = getString(R.string.spanish)
val languages = arrayOf(english, spanish)
val builder = AlertDialog.Builder(this)
builder.setTitle(getString(R.string.choose_language_text))
val yes=MyPreferences(this).darkMode
val checkedItem = MyPreferences(this).lang
builder.setSingleChoiceItems(languages, checkedItem) { dialog, which ->
when (which) {
0 -> {
setLocate("en")
recreate()
MyPreferences(this).lang = 0
dialog.dismiss()
}
1 -> {
setLocate("es")
recreate()
MyPreferences(this).lang = 1
dialog.dismiss()
}
}
}
val dialog = builder.create()
dialog.show()
}
//for change language
fun setLocate(lang: String) {
val locale= Locale(lang)
Locale.setDefault(locale)
val config = Configuration()
config.locale =locale
baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics)
// val editor = getSharedPreferences("settings", Context.MODE_PRIVATE).edit()
//editor.putString("my_lang", lang)
// editor.apply()
}
private fun loadLocate(){
when (MyPreferences(this).lang) {
0 -> {
setLocate("en")
}
1 -> {
setLocate("es")
}
}
/* val sharedPreferences= getSharedPreferences("settings", Activity.MODE_PRIVATE)
val language = sharedPreferences.getString("my_lang","")!!
setLocate(language)*/
}
private fun checkTheme() {
when (MyPreferences(this).darkMode) {
0 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
delegate.applyDayNight()
}
1 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
delegate.applyDayNight()
}
2 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
delegate.applyDayNight()
}
}
}