android 原生dialog中使用composeview
参考这篇这个
class KeyboardViewLifecycleOwner :
LifecycleOwner, ViewModelStoreOwner, SavedStateRegistryOwner {
fun onCreate() {
savedStateRegistryController.performRestore(null)
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
}
fun onResume() {
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
}
fun onPause() {
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
}
fun onDestroy() {
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
store.clear()
}
/**
Compose uses the Window's decor view to locate the
Lifecycle/ViewModel/SavedStateRegistry owners.
Therefore, we need to set this class as the "owner" for the decor view.
*/
fun attachToDecorView(decorView: View?) {
if (decorView == null) return
ViewTreeLifecycleOwner.set(decorView, this)
ViewTreeViewModelStoreOwner.set(decorView, this)
ViewTreeSavedStateRegistryOwner.set(decorView, this)
}
// LifecycleOwner methods
private val lifecycleRegistry: LifecycleRegistry = LifecycleRegistry(this)
override fun getLifecycle(): Lifecycle = lifecycleRegistry
// ViewModelStore methods
private val store = ViewModelStore()
override fun getViewModelStore(): ViewModelStore = store
// SavedStateRegistry methods
private val savedStateRegistryController = SavedStateRegistryController.create(this)
override fun getSavedStateRegistry(): SavedStateRegistry =
savedStateRegistryController.savedStateRegistry
}
class MyKeyboardService : InputMethodService() {
private val keyboardViewLifecycleOwner = KeyboardViewLifecycleOwner()
override fun onCreate() {
super.onCreate()
keyboardViewLifecycleOwner.onCreate()
}
override fun onCreateInputView(): View {
//Compose uses the decor view to locate the "owner" instances
keyboardViewLifecycleOwner.attachToDecorView(
window?.window?.decorView
)
return MyComposeView(this)
}
override fun onStartInputView(info: EditorInfo?, restarting: Boolean) {
keyboardViewLifecycleOwner.onResume()
}
override fun onFinishInputView(finishingInput: Boolean) {
keyboardViewLifecycleOwner.onPause()
}
override fun onDestroy() {
super.onDestroy()
keyboardViewLifecycleOwner.onDestroy()
}
}