Function
Android
@ExperimentalComposeViewContextApi
fun View.findViewTreeComposeViewContext(): ComposeViewContext?
Returns the ComposeViewContext used in this View's part of the hierarchy, or null if one cannot be found or it doesn't match the values set for View.findViewTreeLifecycleOwner or View.findViewTreeSavedStateRegistryOwner. For example, if there is a ComposeView set in the hierarchy, findViewTreeComposeViewContext on a child of that View will normally return that ComposeViewContext. However, if the child is within a Fragment, its LifecycleOwner differs from the ComposeView, so findViewTreeComposeViewContext will return null.
This can be used with AbstractComposeView.createComposition to compose without the ComposeView being attached:
Code Examples
ComposeViewContextUnattachedSample
@OptIn(ExperimentalComposeViewContextApi::class)
fun ComposeViewContextUnattachedSample(attachedView: View) {
val composeView = ComposeView(attachedView.context)
composeView.setContent { Box(Modifier.fillMaxSize()) }
// If a ComposeViewContext hasn't been attached to the hierarchy, create a new one for this view
val composeViewContext =
attachedView.findViewTreeComposeViewContext() ?: ComposeViewContext(attachedView)
// start composing while composeView isn't attached
composeView.createComposition(composeViewContext)
}