androidx.compose.ui.window
Interfaces
DialogWindowProvider |
Provides the underlying window of a dialog. |
android
|
PopupPositionProvider |
Calculates the position of a |
Cmn
|
Classes
DialogProperties |
Properties used to customize the behavior of a |
Cmn
android
|
PopupProperties |
Properties used to customize the behavior of a |
Cmn
android
|
Enums
SecureFlagPolicy |
Policy on setting |
android
|
Top-level functions summary
Unit |
@ComposableOpens a dialog with the given content. |
Cmn
android
|
Unit |
@ComposableOpens a popup with the given content. |
Cmn
android
|
Unit |
@ComposableOpens a popup with the given content. |
Cmn
android
|
Boolean |
@TestOnlyReturns 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() |
|
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() |
|
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() |
|
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.