Jetpack Compose에서 탐색 창을 추가하는 방법은 무엇입니까?
이 기사는 원래 2022년 9월 17일 vtsen.hashnode.dev에 게시되었습니다.
이 자습서는 이전에 생성한 이 기존bottom navigation demo app 위에 구축되었습니다.
앱은 로그인 화면으로 시작한 다음 홈 화면으로 이동합니다. 홈 화면에서 프로필 또는 검색 화면으로 이동할 수 있습니다.
홈 화면에서 시작하는 내비게이션 드로어를 추가하겠습니다.
1. 탐색 아이콘 메뉴가 있는 상단 앱 바 추가
상단 앱 바는 홈 화면에서 다음과 같이 보입니다.
TopBar()
구성 가능@Composable
fun TopBar(
navController: NavController,
onNavigationIconClick: () -> Unit,
) {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route
if (currentRoute == null || currentRoute == NavRoute.Login.path) {
return
}
TopAppBar(
title = {
Text(text = stringResource(id = R.string.app_name))
},
navigationIcon = {
IconButton(onClick = onNavigationIconClick) {
Icon(
imageVector = Icons.Default.Menu,
contentDescription = null,
)
}
},
)
}
MainScreen()
에서 TopBar()
를 매개변수로 Scaffold()
에 전달합니다.scaffoldState
도 전달해야 합니다. 이 단계를 놓치면 탐색 창이 표시되지 않습니다scaffoldState.drawerState.open()
를 호출하여 탐색 창을 엽니다(추후 구현 예정).val navController = rememberNavController()
val scaffoldState = rememberScaffoldState()
val scope = rememberCoroutineScope()
Scaffold(
scaffoldState = scaffoldState,
topBar = { TopBar(
navController =navController,
onNavigationIconClick = {
scope.launch {
scaffoldState.drawerState.open()
}
}
) },
bottomBar = { BottomBarNav(navController = navController) },
) {
NavGraph(navController)
}
2. 내비게이션 서랍 및 본문 추가
미리보기는 이렇게 생겼습니다.
@Composable
fun DrawerHeader(){
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 64.dp)
,
horizontalArrangement = Arrangement.Center,
) {
Text(text = "Header", fontSize = 60.sp)
}
}
@Composable
private fun DrawerMenuItem(
iconDrawableId: Int,
text: String,
onItemClick: () -> Unit){
Row(
modifier = Modifier
.fillMaxWidth()
.clickable {onItemClick()}
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically,
){
Icon(
painter = painterResource(iconDrawableId),
contentDescription = null,
)
Spacer(modifier = Modifier.width(16.dp))
Text(text = text, )
}
}
@Composable
fun DrawerBody(navController: NavHostController?, closeNavDrawer: () -> Unit) {
Column {
DrawerMenuItem(
iconDrawableId = R.drawable.ic_home,
text = NavRoute.Home.path,
onItemClick = {
navController?.navigate(NavRoute.Home.path)
closeNavDrawer()
}
)
DrawerMenuItem(
iconDrawableId = R.drawable.ic_search,
text = NavRoute.Search.path,
onItemClick = {
navController?.navigate(NavRoute.Search.withArgs("liang moi"))
closeNavDrawer()
}
)
}
}
완료
소스 코드
GitHub 저장소: Demo_SimpleNavigationCompose(bottom_nav_drawer branch)
또한보십시오
Reference
이 문제에 관하여(Jetpack Compose에서 탐색 창을 추가하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vtsen/how-to-add-navigation-drawer-in-jetpack-compose-4c9n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)