更改日/夜主题将语言更改为默认语言-kotlin

时间:2021-05-15 13:57:29

标签: android kotlin

我不知道这个问题是否已经存在,但我没有找到任何解决方案。 我在移动应用程序中有两种语言(英语和西班牙语)和日/夜主题。当我更改语言时,我的应用程序运行良好,但是当我更改主题时,语言会自动更改为默认语言。 谢谢! 代码:

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()
        }
    }
}

0 个答案:

没有答案
相关问题