【问题标题】:Jetpack Compose Desktop is there a way to add elevation to window? How can I set minimun size of window?Jetpack Compose Desktop 有没有办法为窗口添加高程?如何设置窗口的最小尺寸?
【发布时间】:2022-07-22 17:09:30
【问题描述】:

我在阅读撰写桌面的教程时遇到了问题。

关于撰写桌面的基础知识,我有两个问题。

首先,有没有办法为整个窗口添加高度?

二、有没有办法设置窗口的最小尺寸? 当我单击窗口的边缘时,即使没有显示任何箭头,也可以调整窗口的大小,但我找不到在其最小尺寸上添加约束的方法。它会一直闪烁直到消失。

我当前的预览是这样的。

我的代码如下所示。

fun main() = application {

val windowState = rememberWindowState()
windowState.size = WindowSize(392.dp, 642.dp)

var isVisible by remember { mutableStateOf(true) }

val trayState = rememberTrayState()

Tray(
    state = trayState,
    icon = TrayIcon,
    hint = "PickMessengerV2",
    onAction = {
        isVisible = true
    },
    menu = {
        Item(
            "Exit",
            onClick = {
                exitApplication()
            }
        )
    }
)

Window(
    onCloseRequest = {
        isVisible = false
    },
    state = windowState,
    undecorated = true,
    resizable = true,
    visible = isVisible
) {


    AppTheme(darkTheme = false) {
        Row(modifier = Modifier.fillMaxSize()) {
            var menuIdx by remember {
                mutableStateOf(value = 0)
            }
            WindowDraggableArea {
                Column(
                    modifier = Modifier.width(67.dp).fillMaxHeight().background(Color(0xFFf3f5f6)),
                    horizontalAlignment = Alignment.CenterHorizontally
                ) {

                    val onClick: (Int) -> Unit = { myIndex ->
                        menuIdx = myIndex
                    }

                    mainMenu(
                        menuIdx,
                        0,
                        listOf("LeftMenu_friend_ON.png", "LeftMenu_friend_OFF.png"),
                        marginTop = 36,
                        onClick = onClick
                    )
                    mainMenu(
                        menuIdx,
                        1,
                        listOf("LeftMenu_ Orga_ON.png", "LeftMenu_ Orga_OFF.png"),
                        onClick = onClick
                    )
                    mainMenu(
                        menuIdx,
                        2,
                        listOf("LeftMenu_chat_ON.png", "LeftMenu_chat_OFF.png"),
                        onClick = onClick
                    )
                    mainMenu(
                        menuIdx,
                        3,
                        listOf("LeftMenu_letter_OFF_2.png", "LeftMenu_letter_OFF.png"),
                        onClick = onClick
                    )
                    mainMenu(
                        menuIdx,
                        4,
                        listOf("LeftMenu_file_ON.png", "LeftMenu_file_OFF.png"),
                        onClick = onClick
                    )
                    mainMenu(
                        menuIdx,
                        5,
                        listOf("LeftMenu_ Coop_ON.png", "LeftMenu_ Coop_OFF.png"),
                        onClick = onClick
                    )
                    mainMenu(
                        menuIdx,
                        6,
                        listOf("LeftMenu_bnad_ON.png", "LeftMenu_band_OFF.png"),
                        onClick = onClick
                    )
                }
            }

            Column(modifier = Modifier.fillMaxSize().background(MaterialTheme.colors.background)) {

                WindowDraggableArea{
                    Row(
                        modifier = Modifier.fillMaxWidth().height(31.dp),
                        verticalAlignment = Alignment.CenterVertically
                    ) {
                        Spacer(modifier = Modifier.weight(1f))
                        Box(modifier = Modifier.fillMaxHeight().clickable {
                            windowState.isMinimized = true
                        }.padding(start = 6.dp, end = 6.dp), contentAlignment = Alignment.Center) {
                            NsImage("win_1.png")
                        }
                        Box(modifier = Modifier.fillMaxHeight().clickable {
                            windowState.placement = if(windowState.placement == WindowPlacement.Fullscreen){
                                WindowPlacement.Floating
                            }else {
                                WindowPlacement.Fullscreen
                            }
                        }.padding(start = 6.dp, end = 6.dp), contentAlignment = Alignment.Center) {
                            NsImage("win_2.png")
                        }
                        Box(modifier = Modifier.fillMaxHeight().clickable {
                            isVisible = false
                        }.padding(start = 6.dp, end = 6.dp), contentAlignment = Alignment.Center) {
                            NsImage("win_3.png")
                        }
                        Spacer(modifier = Modifier.width(6.dp))
                    }
                }
            }
        }
    }
}

}

【问题讨论】:

  • 请不要在一个 stackoverflow 问题中问 2 个问题。相反,创建第二个。
  • 关于为什么要分开的更多信息,请参阅herehere

标签: android-jetpack-compose kotlin-multiplatform


【解决方案1】:

这是最小窗口大小的解决方案: 您需要通过 FrameWindowScope 访问 AWT API

    fun FrameWindowScope.setMinSize() {
        window.minimumSize = Dimension(yourMinWidth, yourMinHeight)
    }

然后您只需在 Window 函数中调用 setMinSize()。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2010-10-26
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多