탐색은 사용자가 앱 내의 여러 콘텐츠를 탐색하고, 그곳에 들어갔다 나올 수 있게 하는 상호작용을 의미합니다.
Android Jetpack의 탐색 구성요소에는 탐색 라이브러리, Safe Args Gradle 플러그인, 앱 탐색을 구현하는 데 도움이 되는 도구가 포함되어 있습니다. 탐색 구성요소는 간단한 버튼 클릭부터 앱 바 및 탐색 창과 같은 좀 더 복잡한 패턴에 이르기까지 다양한 탐색 사용 사례를 처리합니다.
주요 개념
다음 표에서는 탐색의 주요 개념과 이를 구현하는 데 사용하는 기본 유형을 간략하게 설명합니다.
개념 |
목적 |
유형 |
---|---|---|
호스트 |
현재 탐색 대상이 포함된 UI 요소입니다. 즉, 사용자가 앱을 탐색할 때 앱은 기본적으로 탐색 호스트 안팎으로 대상을 전환합니다. |
|
그래프 |
앱 내의 모든 탐색 대상과 연결 방법을 정의하는 데이터 구조입니다. |
|
컨트롤러 |
대상 간 탐색을 관리하는 중앙 코디네이터입니다. 컨트롤러는 대상 간 탐색, 딥 링크 처리, 백 스택 관리 등의 작업을 위한 메서드를 제공합니다. |
|
목적지 |
탐색 그래프의 노드입니다. 사용자가 이 노드로 이동하면 호스트가 콘텐츠를 표시합니다. |
일반적으로 탐색 그래프를 구성할 때 생성됩니다. |
경로 |
대상과 대상에 필요한 데이터를 고유하게 식별합니다. 경로를 사용하여 탐색할 수 있습니다. 경로를 따라 목적지로 이동합니다. |
직렬화 가능한 모든 데이터 유형 |
장점 및 기능
탐색 구성요소는 다음을 포함하여 여러 다른 장점과 기능을 제공합니다.
- 애니메이션 및 전환: 애니메이션 및 전환에 표준화된 리소스를 제공합니다.
- 딥 링크: 사용자를 대상으로 직접 안내하는 딥 링크를 구현하고 처리합니다.
- UI 패턴: 최소한의 추가 작업으로 탐색 창 및 하단 탐색과 같은 패턴을 지원합니다.
- 유형 안전성: 유형 안전성을 사용하여 대상 간에 데이터를 전달하는 지원이 포함됩니다.
- ViewModel 지원:
ViewModel
의 범위를 탐색 그래프로 지정하여 그래프 대상 간에 UI 관련 데이터를 공유할 수 있습니다. - 프래그먼트 트랜잭션: 프래그먼트 트랜잭션을 완전히 지원하고 처리합니다.
- 뒤로 및 위로: 기본적으로 뒤로 및 위로 작업을 올바르게 처리합니다.
환경 설정
프로젝트에 탐색 지원을 포함하려면 앱의 build.gradle
파일에 다음 종속 항목을 추가합니다.
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.8.8" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.8.8" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
다른 아키텍처 구성요소를 프로젝트에 추가하는 방법에 관한 자세한 내용은 프로젝트에 구성요소 추가를 참고하세요.
다음 단계
탐색 구성요소와 관련된 추가적인 문서와 리소스는 다음 리소스를 참고하세요.
자세한 가이드
탐색 호스트 및 NavController
를 구현하는 방법과 Compose 및 기타 UI 프레임워크와 상호작용하는 방법에 관한 자세한 내용은 다음 가이드를 참고하세요.
- 탐색 컨트롤러 만들기:
NavController
를 만드는 방법을 간략하게 설명합니다. - 탐색 그래프 만들기: 탐색 호스트와 탐색 그래프를 만드는 방법을 자세히 설명합니다.
- 대상으로 이동:
NavController
를 사용하여 그래프에서 대상 간에 이동하는 방법을 보여줍니다.
Codelab
동영상
- 탐색 구성요소 탐색하기
- 단일 활동으로 이동하기 위한 10가지 권장사항
- 단일 활동: 왜, 언제, 어떻게 (Android Dev Summit '18)
- Android Jetpack: 탐색 컨트롤러를 사용하여 UI 탐색 관리(Google I/O '18)
샘플
Evernote's mission is to help individuals and groups remember everything, turn ideas into action, and work effortlessly together. Their Android app gives people the tools they need to get organized, take and save notes, and collaborate with others. Squid allows users to take handwritten notes naturally on various devices. With Squid you can write just like you would on paper using an active pen, passive stylus, or your finger and easily mark up PDFs to fill out forms, edit/grade papers, or sign documents.Evernote launches on ChromeOS and sees 3X increase in time spent on larger screen devices
Squid boosts their rating with new features in ChromeOS