簡體   English   中英

如何使用 DropDownPreference 更改主題

[英]How to use DropDownPreference to change theme

我想在我的設置頁面中使用DropDownPreference ,但是盡管瀏覽了整個互聯網,但似乎沒有任何像樣的教程來說明如何做到這一點。 有誰知道onPreferenceChange方法中的 go 應該是什么? 我以前使用RadioButton ,但現在想使用DropDownPreference來更輕松地實現和維護。

活動

class SettingsActivity : AppCompatActivity(), FragmentSettings.PreferenceXchangeListener {
    private var mCurrentValue: Boolean = false // False is the default value

    override fun onCreate(savedInstanceState: Bundle?) {
        val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
        mCurrentValue = mSharedPreferences.getBoolean("preference_dark", false)

        if (mCurrentValue) {
            setTheme(R.style.MyDarkSettingsTheme)
        } else {
            setTheme(R.style.MyLightSettingsTheme)
        }

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_settings)


        val viewllSettingsContainer = settings_container
        val root = viewllSettingsContainer.rootView


        if (mCurrentValue) {
            root.setBackgroundColor(Color.BLACK)
        } else {
            root.setBackgroundColor(Color.WHITE)
        }

        val settingsFragment = FragmentSettings()
        supportFragmentManager
            .beginTransaction()
            .replace(R.id.settings_container, settingsFragment)
            .commit()
    }


    override fun onXchange(value:Boolean) {
        when {
            mCurrentValue != value -> {
                mCurrentValue = value
                recreate()
            }
        }
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            android.R.id.home -> {
                val intent = parentActivityIntent
                intent?.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
                onBackPressed()
                true
            }

            else ->
                super.onOptionsItemSelected(item)
        }
    }
}

分段

class SettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener,
    Preference.OnPreferenceClickListener {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.app_preferences)
    }
}

我認為你過於復雜了。 沒有必要讓片段參與監聽它不會處理的首選項的更改並將其傳遞回活動。 您可以為 Activity 中的所有首選項注冊首選項更改偵聽器,並在那里做出相應的響應。

class SettingsActivity : AppCompatActivity(), 
    SharedPreferences.OnSharedPreferenceChangeListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
        sharedPreferences.registerOnSharedPreferenceChangeListener(this)
        //...
    }

    override fun onDestroy() {
        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
        sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
        //...
        super.onDestroy()
    }

    override fun onSharedPreferenceChanged(_: SharedPreferences, key: String) {
        when (key){
            "preference_dark" -> recreate()
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM