Jetpack Compose for Desktop设置窗口大小实际会比指定的数字更小的问题
在Jetpack Compose for desktop的工程里,给桌面程序窗口设置大小(宽高)居然还要绕一层,让我确实有点疑惑。
总之,我们要设置窗口大小,默认设置/教程里应该都是这样子的 —— 通过window state,设置顶层窗口的宽高。
fun main() = application { Window( onCloseRequest = ::exitApplication, state = WindowState(width = 800.dp, height = 600.dp), resizable = false ) { App() } }
可惜的是,这个搞法他有问题。实际上,他运行出来的窗口就对不上我们设置的大小。
我用qq截图选框对比大小、以及对比其他应用的大小后,发现你用这套逻辑的宽高都会小一截,宽和高都缩水了几十个像素……
实际生成的窗口大小比我们设置的大小要更小。
找了找 StackOverflow,也有差不多的问题:
layout – How do I set the window size to fit the contents in Jetpack Compose? – Stack Overflow
不过他这个问题没人回答,所以我又去找了找其他地方,自己再试了几下。
总之,让窗口的宽高和你的预想一致的方式,其实应该长这样:
fun main() = application { Window( onCloseRequest = ::exitApplication, state = WindowState(size = DpSize.Unspecified), resizable = false ) { Box(Modifier.size(800.dp, 600.dp)) { App() } } }
顶层窗口的WindowState设置款高为未定义,里面再套一层Box把窗口给撑起来,我们就设置里面Box的宽高。我实际截图测试了一下窗口大小,这样子确实是完美的。
以上,记录一下。