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.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntRect import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Popup import androidx.compose.ui.window.PopupPositionProvider val dropdownPopupPositioner = remember {  object : PopupPositionProvider {  override fun calculatePosition(  anchorBounds: IntRect,  windowSize: IntSize,  layoutDirection: LayoutDirection,  popupContentSize: IntSize,  ): IntOffset {  // Position the popup below the anchor aligned horizontally with the anchor's  // center.  return IntOffset(  x = anchorBounds.left + anchorBounds.width / 2,  y = anchorBounds.top + anchorBounds.height * 2,  )  }  } } Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {  Box(modifier = Modifier.background(Color.LightGray).padding(10.dp)) {  BasicText(text = "Anchor")  Popup(popupPositionProvider = dropdownPopupPositioner) {  Box(  modifier =  Modifier.background(Color.Green, RoundedCornerShape(16.dp)).padding(10.dp),  contentAlignment = Alignment.Center,  ) {  BasicText(text = "Popup")  }  }  } }
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 original aligned position of the popup. Offset respects the Ltr/Rtl context, thus in Ltr it will be added to the original 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.