androidandroid-jetpack-compose

Do not clip bounds of AndroidView in Compose


From AndroidView documentation:

AndroidView will clip its content to the layout bounds, as being clipped is a common assumption made by Views - keeping clipping disabled might lead to unexpected drawing behavior. Note this deviates from Compose's practice of keeping clipping opt-in, disabled by default.

This seems to suggest that there is a way to turn clipping off, but I can't manage to do so.

I've tried:

Is it possible to turn off clipping?


Solution

  • It's a known feature request, here's a workaround until it's implemented:

    @Composable
    fun <T : View> AndroidView(
        clipToBounds: Boolean,
        factory: (Context) -> T,
        modifier: Modifier = Modifier,
        update: (T) -> Unit = NoOpUpdate,
    ) {
        androidx.compose.ui.viewinterop.AndroidView(
            factory = factory,
            modifier = modifier,
            update = if (clipToBounds) {
                update
            } else {
                {
                    (it.parent as? ViewGroup)?.clipChildren = false
                    update(it)
                }
            }
        )
    }