我可以在不重新启动活动的情况下应用夜间模式吗?



在创建Android应用程序时,我想创建一个函数,允许您在从片段创建的对话框窗口中设置暗模式。由于找到了设置暗模式的方法,几乎所有开发人员都使用重新启动活动。有没有办法在不重新启动的情况下立即应用暗模式?这是我当前使用的片段内对话框窗口中的暗模式应用程序代码。

class MyFragment : Fragment() {
private var dialog: AlertDialg? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_my, container, false)
if (AppCompatDelegete.getDefulatNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
context!!.setTheme(R.style.DarkTheme)
} else {
context!!.setTheme(R.style.LightTheme)
}
view.darkMode.setOnClickListener {
val v = LayoutInfalter.from(context).inflate(R.layout.dialog_dark, null)
builder.setView(v)
dialog = builder.create()
dialog.show()
v.selectMode.setOnCheckedChangeListener { _, id ->
when (id) {
R.id.light -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
val intent = Intent(context, MainActivity::class.java)
startActivity(intent)

}
R.id.dark -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
val intent = Intent(context, MainActivity::class.java)
startActivity(intent)

}
}
}
}
}
}

单击view中的darkMode按钮,使fragment_myvdialog_dark膨胀。在v里面,有由RadioGroup制成的selectMode,里面有light单选按钮和dark单选按钮。当我如上所述时,我确认当单击lightdark时,它会从主活动重新启动。是否可以在不关闭对话框窗口的情况下,每次单击ligthdark时立即应用主题更改?

这可以在 Kotlin 中通过滥用可见性修饰符来完成。

创建一个包含以下内容的 Kotlin 文件(如AppCompatExtensions.kt(:

@file:Suppress("PackageDirectoryMismatch")
package androidx.appcompat.app
/**
* Misuses a package-private function to remove an activity
*/
fun doNotRestartThisActivity(activity: AppCompatActivity) {
AppCompatDelegate.removeActivityDelegate(activity.delegate)
}

现在在您的活动中,在调用AppCompatDelegate.setNightMode(MODE)调用新方法之前:

doNotRestartThisActivity(this)

这将从需要重新启动的活动列表中删除当前活动。

最新更新