Метод open
Метод open класса
DrawerState
выдвигает боковое меню.
Это suspend-функция, её нельзя вызвать
напрямую из onClick.
Обычно берут
rememberCoroutineScope
и пишут scope.launch { drawerState.open() }.
Состояние заранее создают через
rememberDrawerState.
Синтаксис
drawerState.open()
Пример
Давайте откроем drawer по нажатию на иконку меню:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material3.DrawerValue
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.ModalNavigationDrawer
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.rememberCoroutineScope
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val drawerState = rememberDrawerState(DrawerValue.Closed)
val scope = rememberCoroutineScope()
ModalNavigationDrawer(
drawerState = drawerState,
drawerContent = {
Text(text = "abcde")
},
) {
TopAppBar(
title = { Text("12345") },
navigationIcon = {
IconButton(
onClick = {
scope.launch { drawerState.open() }
},
) {
Icon(
imageVector = Icons.Filled.Menu,
contentDescription = "12345",
)
}
},
)
}
}
}
}
На экране после нажатия на меню панель выедет слева.
Пример
Давайте откроем панель сразу после входа на экран:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.DrawerValue
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ModalNavigationDrawer
import androidx.compose.material3.Text
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.LaunchedEffect
@OptIn(ExperimentalMaterial3Api::class)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val drawerState = rememberDrawerState(DrawerValue.Closed)
LaunchedEffect(Unit) {
drawerState.open()
}
ModalNavigationDrawer(
drawerState = drawerState,
drawerContent = {
Text(text = "abcde")
},
) {
Text(text = "12345")
}
}
}
}
На экране меню откроется без нажатия, когда стартует LaunchedEffect.
Смотрите также
-
метод
close,
который прячет панель -
класс
DrawerState,
у которого вызывают open -
функция
rememberDrawerState,
которая создаёт drawerState -
функция
ModalNavigationDrawer,
которая рисует панель по состоянию