This will be a rather short post and a very specific one, too. Before we go into details I would like thank Roman Sedaikin who commented on an issue I created on GitHub. He brought my attention to DesktopDialogProperties.
Let's take a look at the AlertDialog composable when used in Compose for Desktop. A rather basic form of an AlertDialog is created like this:
AlertDialog(onDismissRequest = {},
title = { Text("Hello title") },
confirmButton = {
Button(onClick = {
}) {
Text("Confirm")
}
},
dismissButton = {
Button(onClick = {
}) {
Text("Dismiss")
}
},
text = { Text("Hello text") })
So we have
- an optional title
- an optional text (message)
- a confirm button
- an optional dismiss button
There is also a window decoration incluing title and icon, which cannot be changed through the arguments you pass to the composable. At least, not directly.
Let's take a closer look at the signature:
There is a DialogProperties? which is set to null by default.
So DialogProperties is a marker interface. To see how we can customize our AlertDialog we need to find implementations. Fortunately IntelliJ can do this for us.
Now let's see what DesktopDialogProperties has to offer.
As we give the AlertDialog a title, we might not want window decorations at all.
properties = DesktopDialogProperties(undecorated = true),
There is not only no decoration but also no border. To fix this, just add a modifier to the AlertDialog. Before I show this to you, pleae keep in mind that in this case you also need to add a dismissButton, because the window close button belongs to the window decoration we just successfully removed.
modifier = Modifier.border(width = 1.dp,
MaterialTheme.colors.primary),
While I think this looks gorgeous you still cannot move the window. I will show you how to do this in a future post. For now you might consider this alternative:
AlertDialog(onDismissRequest = {},
confirmButton = {
Button(onClick = {
}) {
Text("Confirm")
}
},
dismissButton = {
Button(onClick = {
}) {
Text("Dismiss")
}
},
properties = DesktopDialogProperties(title = "Hello title"),
text = { Text("Hello text") })
I omitted the title argument for AlertDialog and put it in DesktopDialogProperties instead.
As you can see, you can customize your Compose for Desktop alert dialogs quite a bit. And there is more. For example you can change the resizability. How do you style yours? Please share your thoughts in the comments.








Top comments (0)