일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Today
- Total
- CoordinateLayout
- android navigation
- android argument
- thumb 공간
- track 공간
- navGraph
- 안드로이드 범블비
- Android
- 안드로이드
- 파이어베이스
- 안드로이드 커스텀 스피너
- checkedChangeListener
- navigation navigate
- custom spinner
- Android Studio
- navArg
- android alarm
- 안드로이드 스튜디오
- 무선페어링
- layout behavior
- 코딩
- spinner hint
- 안드로이드 커스텀 스위치
- android alarm manager
- android custom switch
- 스피너 힌트
- navController
- alarm manager
- android custom spinner
- 툴바 고정
Pa K'ode
[안드로이드] Navigation Components 들을 알아보자 본문
안녕하세요, 안드로이드 개발자 파쿠입니다 :)
오늘 다뤄볼 내용은 안드로이드 정통 컴포넌트 중 하나인
Navigation에 대해서 정리해보려고 합니다.
저도 요즘 들어 가장 선호하는 방식이기도 하며
액티비티를 많이 사용하지 않아서
프로젝트 관리가 더 편해진다는 장점도 있습니다.
왜 사용하는가?
직접 사용하고, 프로젝트를 세팅하면서 좋다고 느낀 장점 두 가지가 있습니다,
첫 번째로는, 파일 수가 줄어들어, 가독성과 버전 관리에 용의 하다는 점이 있습니다.
기존의 Container에 Fragment을 사용하는 것과 동일한 방식이지만, 굳이 Navigation을 사용하는 이유는
아래의 사진처럼 어떤 Fragment끼리 얽혀있는지, 진행 방향이 어디인지, 시각적으로 확인할 수 있어서
굳이 코드를 하나씩 찾아보지 않아도 쉽게 이해할 수 있게 됩니다.
두 번째로, 대상 간 데이터(Argument)를 전달해 줄 때 반복되는 코드를 줄여주고,
인수를 쉽고 안전하게 전달해 준다는 점이 있습니다.
기존 방식은 FragmentManager을 호출, 탐색, 후 더해줄 fragment의
Bundle에 데이터를 담아 전달해 주는 방식이었지만 Naviagtion을 사용한다면,
<argument> 태그를 열어 추가하면 NavDestination 컴포넌트에 필요한 인자의 속성이 전달되게 됩니다.
이런 점들이 프로젝트의 설계, 관리, 하는 측면으로 보았을 때 정말 좋았어서 자주 사용하게 되었습니다.
서론이 길었으니, 기본적인 사용 방법과 알아두면 좋은 점에 대해 말씀드려볼까 합니다.
Gradle에 Library추가
Gradle(App)
implementation("androidx.navigation:navigation-fragment-ktx:${Versions.navigation}")
implementation("androidx.navigation:navigation-ui-ktx:${Versions.navigation}")
${Versions.navigation} 이라 적힌 부분에는 최신 버전의 라이브러리 버전을 적어주시면 됩니다.
https://developer.android.com/jetpack/androidx/releases/navigation
두 번쨰로 Navigation의 SafeArg을 Project, App 수준의 gradle 플러그인에 선언해 주어야 합니다.
Gradle(Project)
plugins {
id("androidx.navigation.safeargs.kotlin") version("윗 버전과 동일") apply(false)
}
Gradle(App)
plugins {
id("androidx.navigation.safeargs.kotlin")
}
Gradle Sync 로 마무리 하시면 NavComponet를 앱에서 사용하실수 있게 됩니다.
Nav Graph 그려보기
앱 모듈의 res 폴더에 우클릭 -> New -> Android Resource Directory -> type에 navigation을 선택해 주신 후
navigation 폴더를 생성해 줍니다. 이미 디렉토리가 있다면, 스킵하셔도 됩니다.
navigation 디렉토리에 우클릭 -> New -> Navigation Resource File 으로 navGraph를 생성 해 줍니다.
<navigation> 태그 안에 담고싶은 activity, fragment, 등의 레이아웃들을 추가할수 있으며,
처음보여줄 startDesination을 id값으로 지정해 줄수 있습니다.
NavHostFragment 추가하기
위에서 생성해준 NavGraph를 담아줄 FragmentContainer를 생성해 주어야 하는데요,
xml 파일에서 쉽게 추가해 줄수 있습니다.
Activity/Fragment.xml
<androidx.fragment.app.FragmentContainerView
android:id="@+id/container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" // 아까 생성한 navGraph의 id(navigation 태그안에 추가)
app:layout_constraintBottom_toTopOf="@id/bottom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
속성에관한 자세한 내용은 아래 공식 문서에서 확인하실수 있습니다.
https://developer.android.com/guide/navigation/navigation-getting-started?hl=ko#kts
NavController로 화면간 이동 해보기
NavController란 이전에 생성한 NavHost내의 객채입니다. NavHost 내부에서의 탐색, 대상간의 이동을 담당합니다.
NavController를 찾는 방법은 아래 함수로 찾을수 있습니다.
- Activity: findNavController(viewId: NavHost의 id)
- Fragment: findNavController()
호출한 NavController의 .navigate 함수를 사용하여 navGraph 에서 선언한 <action> 태그로 생성된
NavDestination를 호출하여 화면간 이동을 할수 있습니다.
이 외로도 activity, dialog, deepLink 등과의 이동도 간편하게 할수 있는 매력적인 컴포넌트입니다.
자세한 내용은 공식 페이지에도 나와있으니, 참조하셔서 코딩하시면 좋을것 같습니다.
https://developer.android.com/guide/navigation/navigation-navigate?hl=ko
'안드로이드' 카테고리의 다른 글
[안드로이드] Alarm Manager 를 활용한 알람기능 구현 (2) | 2023.10.05 |
---|---|
[안드로이드] Spinner 기본 사용 방법과 Custom 방법에대해 알아보자 (1) | 2022.09.01 |
[안드로이드] CoordinateLayout 을 이용한 활용방법들을 알아보자 (feat. AppBarLayout) (2) | 2022.05.31 |
[안드로이드] 스튜디오 BumbleBee 업데이트 적용 및 기능정의 (0) | 2022.02.09 |
[안드로이드] [디자인] Switch 커스텀 해서 사용하기 (0) | 2022.01.20 |