Spec-Zone.ru › Kotlin 2

Строка меню

Вы можете создать строку меню для определённого окна с помощью компонуемой функции MenuBar(). MenuBar() доступна в области видимости компонуемой функции Window(), поэтому у каждого окна может быть собственная строка меню.

Примеры в этом руководстве — запускаемые настольные приложения. Чтобы попробовать один из них:

  1. Создайте проект Compose Multiplatform с помощью плагина IDE Kotlin Multiplatform или онлайн-мастера.

  2. Откройте файл точки входа настольного приложения. Например, desktopApp/src/main/kotlin/com/example/my_desktop_app/main.kt.

  3. Замените его содержимое приведённым примером.

В MenuBar() можно использовать следующие компоненты:

  • Menu() — меню или подменю

  • Item() — элемент меню, по которому можно щёлкнуть

  • CheckboxItem() — элемент с флажком

  • RadioButtonItem() — элемент с переключателем

  • Separator() — горизонтальная линия, разделяющая группы элементов

Для элементов и меню можно задать параметр mnemonic — символ, который открывает меню или запускает элемент при нажатии вместе с Alt. Если этот символ есть в тексте, его первое вхождение подчёркивается. Для элементов также можно задать параметр shortcut — параметр KeyShortcut, который запускает действие без перехода по меню.

Установка ctrl = true в KeyShortcut всегда соответствует Ctrl, в том числе в macOS. Чтобы использовать ⌘ для стандартных сочетаний клавиш macOS, задайте вместо этого meta = true.

Содержимое меню является компонуемым, поэтому внутри MenuBar() можно использовать условия и циклы, определяющие, какие элементы будут отображаться. При изменении состояния, от которого они зависят, меню обновляется. В следующем примере подменю Settings отображается, только пока установлен флажок Advanced settings:

import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.Text import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyShortcut import androidx.compose.ui.window.MenuBar import androidx.compose.ui.window.Window import androidx.compose.ui.window.application fun main() = application { var action by remember { mutableStateOf("Last action: None") } var isOpen by remember { mutableStateOf(true) } if (isOpen) { var isSubmenuShowing by remember { mutableStateOf(false) } Window(onCloseRequest = { isOpen = false }) { MenuBar { Menu("File", mnemonic = 'F') { Item("Copy", onClick = { action = "Last action: Copy" }, shortcut = KeyShortcut(Key.C, ctrl = true)) Item( "Paste", onClick = { action = "Last action: Paste" }, shortcut = KeyShortcut(Key.V, ctrl = true) ) } Menu("Actions", mnemonic = 'A') { CheckboxItem( "Advanced settings", checked = isSubmenuShowing, onCheckedChange = { isSubmenuShowing = !isSubmenuShowing } ) if (isSubmenuShowing) { Menu("Settings") { Item("Setting 1", onClick = { action = "Last action: Setting 1" }) Item("Setting 2", onClick = { action = "Last action: Setting 2" }) } } Separator() Item("About", icon = AboutIcon, onClick = { action = "Last action: About" }) Item("Exit", onClick = { isOpen = false }, shortcut = KeyShortcut(Key.Escape), mnemonic = 'E') } } Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center ) { Text(text = action) } } } } object AboutIcon : Painter() { override val intrinsicSize = Size(256f, 256f) override fun DrawScope.onDraw() { drawOval(Color(0xFFFFA500)) } }
Desktop menu bar

В Windows и Linux строка меню является частью окна. В macOS она отображается в системной строке меню в верхней части экрана, когда окно активно.

Что дальше

  • Узнайте, как добавить значок приложения и меню в системный трей.

  • Изучите руководства о других компонентах настольных приложений.

18 августа 2026
Трей и уведомленияОбработчики событий мыши

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-desktop-menu-bar.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API