I added adaptive themes in my application using List Preferences and it does not work. Sometimes when I create Build APK and test Preferences, the theme it sets to dark for a second and returns to the light one... I do not understand why it does so. Am I missing something..?
I added an activity for settings:
class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
private lateinit var binding: SettingsActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = SettingsActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
supportFragmentManager.beginTransaction().replace(R.id.settings, SettingsFragment()).commit()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this)
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
val darkModeString = getString(R.string.dark_mode)
key?.let {
if (it == darkModeString) sharedPreferences?.let { pref -> val darkModeValues = resources.getStringArray(R.array.dark_mode_values)
when (pref.getString(darkModeString, darkModeValues[0])) {
darkModeValues[0] -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
darkModeValues[1] -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
darkModeValues[2] -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
darkModeValues[3] -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY)
}
}
}
}
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.settings_preferences, rootKey)
}
}
}
Also the arrays:
<resources>
<string-array name="dark_mode_entries">
<item>Follow System</item>
<item>Light Mode</item>
<item>Dark Mode</item>
<item>Auto Battery Dark Mode</item>
</string-array>
<string-array name="dark_mode_values">
<item>MODE_NIGHT_FOLLOW_SYSTEM</item>
<item>MODE_NIGHT_NO</item>
<item>MODE_NIGHT_YES</item>
<item>MODE_NIGHT_AUTO_BATTERY</item>
</string-array>
</resources>
And the Preference:
<androidx.preference.ListPreference
app:defaultValue="@string/theme_def_value"
app:entries="@array/dark_mode_entries"
app:entryValues="@array/dark_mode_values"
android:icon="@drawable/ic_settings_themes"
app:key="@string/theme"
app:title="@string/theme"
app:useSimpleSummaryProvider="true"/>
What is missing? I can't figure out why it turns dark for a second and then it comes back to light theme....
I used this dark mode tutorial to add it in my app....