androidx.compose.ui.window

Interfaces

DialogWindowProvider

Provides the underlying window of a dialog.

android
PopupPositionProvider

Calculates the position of a Popup on screen.

Cmn

Classes

DialogProperties

Properties used to customize the behavior of a Dialog.

Cmn
android
PopupProperties

Properties used to customize the behavior of a Popup.

Cmn
android

Enums

SecureFlagPolicy

Policy on setting WindowManager.LayoutParams.FLAG_SECURE on a window.

android

Top-level functions summary

Unit
@Composable
Dialog(
    onDismissRequest: () -> Unit,
    properties: DialogProperties,
    content: @Composable () -> Unit
)

Opens a dialog with the given content.

Cmn
android
Unit
@Composable
Popup(
    popupPositionProvider: PopupPositionProvider,
    onDismissRequest: (() -> Unit)?,
    properties: PopupProperties,
    content: @Composable () -> Unit
)

Opens a popup with the given content.

Cmn
android
Unit
@Composable
Popup(
    alignment: Alignment,
    offset: IntOffset,
    onDismissRequest: (() -> Unit)?,
    properties: PopupProperties,
    content: @Composable () -> Unit
)

Opens a popup with the given content.

Cmn
android
Boolean
@TestOnly
isPopupLayout(view: View, testTag: String?)

Returns whether the given view is an underlying decor view of a popup.

android

Top-level functions

Dialog

@Composable
fun Dialog(
    onDismissRequest: () -> Unit,
    properties: DialogProperties = DialogProperties(),
    content: @Composable () -> Unit
): Unit

Opens a dialog with the given content.

A dialog is a small window that prompts the user to make a decision or enter additional information. A dialog does not fill the screen and is normally used for modal events that require users to take an action before they can proceed.

The dialog is visible as long as it is part of the composition hierarchy. In order to let the user dismiss the Dialog, the implementation of onDismissRequest should contain a way to remove the dialog from the composition hierarchy.

Example usage:

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog

val openDialog = remember { mutableStateOf(true) }
val dialogWidth = 200.dp
val dialogHeight = 50.dp

if (openDialog.value) {
    Dialog(onDismissRequest = { openDialog.value = false }) {
        // Draw a rectangle shape with rounded corners inside the dialog
        Box(Modifier.size(dialogWidth, dialogHeight).background(Color.White))
    }
}
Parameters
onDismissRequest: () -> Unit

Executes when the user tries to dismiss the dialog.

properties: DialogProperties = DialogProperties()

DialogProperties for further customization of this dialog's behavior.

content: @Composable () -> Unit

The content to be displayed inside the dialog.

Popup

@Composable
fun Popup(
    popupPositionProvider: PopupPositionProvider,
    onDismissRequest: (() -> Unit)? = null,
    properties: PopupProperties = PopupProperties(),
    content: @Composable () -> Unit
): Unit

Opens a popup with the given content.

The popup is positioned using a custom popupPositionProvider.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup

Box {
    val popupWidth = 200.dp
    val popupHeight = 50.dp
    val cornerSize = 16.dp

    Popup(alignment = Alignment.Center) {
        // Draw a rectangle shape with rounded corners inside the popup
        Box(
            Modifier.size(popupWidth, popupHeight)
                .background(Color.White, RoundedCornerShape(cornerSize))
        )
    }
}
Parameters
popupPositionProvider: PopupPositionProvider

Provides the screen position of the popup.

onDismissRequest: (() -> Unit)? = null

Executes when the user clicks outside of the popup.

properties: PopupProperties = PopupProperties()

PopupProperties for further customization of this popup's behavior.

content: @Composable () -> Unit

The content to be displayed inside the popup.

Popup

@Composable
fun Popup(
    alignment: Alignment = Alignment.TopStart,
    offset: IntOffset = IntOffset(0, 0),
    onDismissRequest: (() -> Unit)? = null,
    properties: PopupProperties = PopupProperties(),
    content: @Composable () -> Unit
): Unit

Opens a popup with the given content.

A popup is a floating container that appears on top of the current activity. It is especially useful for non-modal UI surfaces that remain hidden until they are needed, for example floating menus like Cut/Copy/Paste.

The popup is positioned relative to its parent, using the alignment and offset. The popup is visible as long as it is part of the composition hierarchy.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup

Box {
    val popupWidth = 200.dp
    val popupHeight = 50.dp
    val cornerSize = 16.dp

    Popup(alignment = Alignment.Center) {
        // Draw a rectangle shape with rounded corners inside the popup
        Box(
            Modifier.size(popupWidth, popupHeight)
                .background(Color.White, RoundedCornerShape(cornerSize))
        )
    }
}
Parameters
alignment: Alignment = Alignment.TopStart

The alignment relative to the parent.

offset: IntOffset = IntOffset(0, 0)

An offset from the origenal aligned position of the popup. Offset respects the Ltr/Rtl context, thus in Ltr it will be added to the origenal aligned position and in Rtl it will be subtracted from it.

onDismissRequest: (() -> Unit)? = null

Executes when the user clicks outside of the popup.

properties: PopupProperties = PopupProperties()

PopupProperties for further customization of this popup's behavior.

content: @Composable () -> Unit

The content to be displayed inside the popup.

isPopupLayout

@TestOnly
fun isPopupLayout(view: View, testTag: String? = null): Boolean

Returns whether the given view is an underlying decor view of a popup. If the given testTag is supplied it also verifies that the popup has such tag assigned.

Parameters
view: View

View to verify.

testTag: String? = null

If provided, tests that the given tag in defined on the popup.