안녕하세요. Narvis2 입니다.
이번 포스팅에서는 Compose
에서 지원하는 펼쳐지는 메뉴인 DropDownMenu
에 대하여 간다한 예제로 알아보도록 하겠습니다.
🍎 DropDownMenu
- 버튼을 눌렀을 때 선택지를 보여주는
Menu
item - 구성요소
expanded
👉DropDownMenu
가 펼쳐졌는지 여부onDismissRequest
👉DropDownMenu
를 닫으라는 명령이 떨어졌을 때의 Callbackoffset
👉DropDownMenu
를 호출하는Composable
의 기준점으로부터의 거리(offset
)을 설정⚠️주의⚠️
DropDownMenu
는 내부에서DropDownMenuPositionProvider
에 의해 자동으로 위치가 조정되어 화면 상에 표시됨
properties
👉Back Button
을 눌렀을 때DropDownMenu
를Dismiss
할 것인지,DropDownMenu
의 바깥쪽을 눌렀을 때Dismiss
할 것인지 등의DropDownMenu
의 기본 동작을 정의content
👉DropDownMenu
안에 들어갈Menu Item
을 넣는 공간,@Composable
넣기, 람다 형식
🍀 DropDownMenuItem
onClick
👉Menu Item
을 눌렀을 때 Callbackenabled
👉Menu Item
을 클릭 가능하게 할 것인지 여부contentPadding
👉DropDownMenuItem
에 적용할Padding
값interactionSource
👉DropDownMenuItem
과 사용자와의Interaction
에 대한Event
를 관리.content
👉DropDownMenuItem
에 표기할 요소 관리,@Composable
넣기, 람다 형식
예제
DropDownMenu
+DropDownMenuItem
을 사용- 필수 3가지 요소
DropDownMenu
가 펼처지는지 제어할 수 있는 변수 필요DropDownMenu
의 펼처짐 상태를 제어하기 위한 버튼 혹은 onClickEvent
를 포함한Composable
필요DropDownMenu
정의
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Composable
fun ButtonWithDropDownMenu() {
// 1. DropDownMenu 펼처짐 여부 상태
val isExpanded = remember { mutableStateOf(false) }
// 2. DropDownMenu 를 Controller 할 버튼 및 Event 생성
Button(onClick = {
isExpanded.value = true
}) {
Text(text = "Show Menu")
}
// 3. DropDownMenu 정의
DropdownMenu(
modifier = Modifier.wrapContentSize(),
expanded = isExpanded.value,
offset = DpOffset(0.dp, 12.dp),
onDismissRequest = { isExpanded.value = false }
) {
// 4. DropDownMenuItem 을 정의
DropdownMenuItem(onClick = {
println("Hello")
}) {
Text(text = "Print Hello")
}
DropdownMenuItem(onClick = {
println("Compose Dropdown")
}) {
Text(text = "Print Compose Dropdown")
}
}
}