7

Jetpack Compose for Desktop设置窗口大小实际会比指定的数字更小的问题

 1 year ago
source link: https://www.skypyb.com/2023/05/jishu/2082/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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()
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()
fun main() = application {
    Window(
        onCloseRequest = ::exitApplication,
        state = WindowState(size = DpSize.Unspecified),
        resizable = false
    ) {
        Box(Modifier.size(800.dp, 600.dp)) {
            App()
        }
    }
}

顶层窗口的WindowState设置款高为未定义,里面再套一层Box把窗口给撑起来,我们就设置里面Box的宽高。我实际截图测试了一下窗口大小,这样子确实是完美的。

以上,记录一下。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK