| page.title=Back 탐색과 Up 탐색 |
| page.tags="navigation","activity","task","up navigation","back navigation" |
| page.image=/design/media/navigation_between_siblings_gmail.png |
| @jd:body |
| |
| <a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html"> |
| <div> |
| <h3>개발자 문서</h3> |
| <p>효과적인 탐색 구현</p> |
| </div> |
| </a> |
| |
| <p itemprop="description">일관적인 탐색 기능은 전반적인 사용자 환경에 필수적인 요소입니다. 일관성 없고 예상대로 진행되지 않는 기본 탐색은 |
| 사용자에게 많은 실망을 줍니다. Android 3.0에서는 |
| 글로벌 탐색 동작에 중요한 변경 사항을 도입했습니다. Back 및 Up 탐색에 대한 |
| 가이드라인을 꼼꼼히 따르면 사용자가 예상 가능하고 신뢰할 수 있는 탐색 기능이 탑재된 앱을 만들 수 있습니다.</p> |
| <p>Android 2.3 이하 버전에서는 앱 내 탐색 기능을 지원하기 위해 시스템의 <em>Back</em> 버튼에 |
| 의존했습니다. Android 3.0에서는 작업 모음을 도입함으로써 앱 아이콘 및 왼쪽 방향 캐럿으로 이루어진 |
| 2차 탐색 메커니즘인<em>Up</em> 버튼이 추가되었습니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_with_back_and_up.png"> |
| |
| <h2 id="up-vs-back">Up과 Back</h2> |
| |
| <p>Up 버튼은 화면 |
| 간의 계층적 관계를 기반으로 앱 내에서 탐색할 때 사용됩니다. 예를 들어, 화면 A에 표시된 항목 목록에서 항목을 선택하면 항목에 대한 세부 정보를 표시하는 화면 B로 이동하게 되는데, 이때 |
| 화면 B는 화면 A로 |
| 돌아가는 Up 버튼을 제공해야 합니다.</p> |
| <p>화면이 앱의 최상단에 있는 경우(즉, 앱의 홈인 경우), Up |
| 버튼이 표시되지 않아야 합니다.</p> |
| |
| <p>시스템의 Back 버튼은 사용자가 최근에 작업한 화면 |
| 기록을 역순으로 탐색할 때 사용됩니다. 일반적으로 이 버튼은 앱의 계층 구조가 아닌 화면 |
| 간의 일시적인 관계를 기반으로 합니다.</p> |
| |
| <p>또한, 앞서 본 화면이 현재 화면의 계층적 상위 화면일 경우 |
| Back 버튼을 누르는 것과 Up 버튼을 누르는 것의 결과가 동일하며, 이는 흔하게 |
| 발생하는 동작입니다. 하지만 사용자가 앱 내에 머무는 Up 버튼과 달리, Back |
| 버튼을 누르면 홈 화면 또는 다른 앱으로 돌아갈 수 있습니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png"> |
| |
| <p>Back 버튼은 화면 간 탐색과 직접적으로 관련 없는 몇 가지 동작도 지원합니다. |
| </p> |
| <ul> |
| <li>부동 창 해제(대화 상자, 팝업)</li> |
| <li>상황에 맞는 작업 모음 해제 및 선택한 항목에서 강조 표시 제거</li> |
| <li>화상 키보드(IME) 감추기</li> |
| </ul> |
| <h2 id="within-app">앱 내 탐색</h2> |
| |
| <h4>여러 진입 지점을 통한 화면 탐색</h4> |
| <p>일부 화면은 앱의 계층 구조 내에서 엄격한 위치를 가지고 있지 않는 경우가 있으며, 이 경우 여러 진입 지점을 |
| 통해서 접근할 수 있습니다. 예를 들어 설정 화면은 앱 |
| 내의 다른 어떤 화면에서도 접근이 가능합니다. 이러한 경우, Up 버튼을 누르면 Back 버튼과 동일하게 |
| 참조하는 화면으로 돌아가게 됩니다.</p> |
| <h4>화면 내에서 뷰 변경</h4> |
| <p>화면의 뷰 옵션 변경은 Up 또는 Back 버튼의 동작을 변경하지 않습니다. 이는 화면이 앱 계층 구조 내에서 여전히 동일한 위치에 |
| 있고, 어떠한 탐색 기록도 새로 생성되지 않기 때문입니다.</p> |
| <p>이러한 뷰 변경의 예는 다음과 같습니다.</p> |
| <ul> |
| <li>탭 및/또는 좌우 스와이프를 사용하여 뷰 전환하기</li> |
| <li>드롭다운(겹쳐진 탭이라고도 함)을 사용하여 뷰 전환하기</li> |
| <li>목록 필터링하기</li> |
| <li>목록 정렬하기</li> |
| <li>표시 문자 변경하기(예: 확대/축소)</li> |
| </ul> |
| <h4>형제 화면 간 탐색하기</h4> |
| <p>항목 목록에서 개별 항목의 상세 뷰로의 이동을 앱에서 지원하는 경우, 해당 항목에서 목록의 이전/이후 |
| 항목으로 직접 이동할 수 있도록 지원하는 것이 바람직한 |
| 경우도 있습니다. 예를 들어 Gmail의 대화에서 왼쪽 또는 오른쪽으로 간단하게 스와이프하여 동일한 받은 편지함에 있는 신규 또는 이전 메일을 |
| 볼 수 있습니다. 화면 내에서 뷰를 변경하는 것과 마찬가지로, |
| 탐색은 Up 또는 Back 버튼의 동작을 바꾸지 않습니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_siblings_gmail.png"> |
| |
| <p>하지만 참조 목록으로 같이 |
| 묶여 있지 않은 연관된 상세 뷰 사이를 탐색할 때는 주목할 만한 예외적인 상황이 발생합니다. 예를 들어, Play Store에서 |
| 동일한 개발자가 만든 여러 앱 또는 동일한 아티스트의 여러 앨범을 탐색하는 경우가 그렇습니다. 이러한 경우, 링크를 따라갈 때마다 |
| 기록이 생성되므로, Back 버튼을 누르면 이전에 본 화면으로 이동합니다. Up 버튼을 누르면 계속해서 이러한 연관된 화면을 |
| 거치지 않고 가장 최근에 본 컨테이너 화면으로 이동합니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_siblings_market1.png"> |
| |
| <p>상세 |
| 뷰에 대한 지식을 바탕으로 더욱 스마트한 Up 버튼 동작을 구현할 수 있습니다. 위에서 설명한 Play Store 예를 확장하여 사용자가 |
| 마지막으로 본 도서에서 해당 도서를 각색한 영화의 세부 정보 화면으로 이동했다고 가정해 봅니다. 그러한 경우, Up 버튼을 누르면 사용자가 이전에 탐색한 적이 없는 |
| 컨테이너(영화)로 이동할 수 있습니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_siblings_market2.png"> |
| |
| <h2 id="into-your-app">홈 화면 위젯 및 알림을 통한 앱 탐색</h2> |
| |
| <p>홈 화면 위젯이나 알림을 사용하여 사용자가 앱 계층 구조 내에 |
| 있는 화면으로 바로 이동할 수 있게 할 수 있습니다. 예를 들어, Gmail의 받은 편지함 위젯과 새 메시지 알림은 |
| 모두 받은 편지함 화면을 건너뛰고 사용자가 해당 메일로 바로 이동할 수 있게 해줍니다.</p> |
| |
| <p>이러한 두 경우 모두 Up 버튼을 다음과 같이 처리합니다.</p> |
| |
| <ul> |
| <li><em>일반적으로 목적지 화면이 |
| 앱 내의 특정 화면에서 출발한 경우</em>, Up 버튼은 해당 화면으로 이동해야 합니다.</li> |
| <li><em>그 외의 경우</em>, Up 버튼은 앱의 최상위("홈") 화면으로 이동해야 합니다.</li> |
| </ul> |
| |
| <p>Back 버튼의 경우, |
| 앱의 최상위 화면으로 이동하는 완전한 상위 탐색 경로를 태스크의 백 스택에 삽입하여 탐색을 더욱 예측 가능하게 만들어야 합니다. 이는 앱에 어떻게 진입했는지 잊어버린 |
| 사용자가 앱에서 나가기 |
| 전에 앱의 최상위 화면으로 이동할 수 있게 해줍니다.</p> |
| |
| <p>예를 들어 Gmail의 홈 화면 위젯은 메일 작성 |
| 화면으로 바로 진입할 수 있는 버튼을 제공합니다. 메일 작성 화면에서 Up 또는 |
| Back 버튼을 누르면 받은 편지함으로 이동하게 되고, 받은 편지함에서 Back 버튼을 누르면 홈으로 돌아가게 됩니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_from_outside_back.png"> |
| |
| <h4>간접 알림</h4> |
| |
| <p>앱이 동시에 다양한 이벤트 정보를 제공해야 하는 경우, 사용자를 틈새 화면(interstitial screen)으로 이동하게 하는 |
| 단일 알림을 사용할 수 있습니다. 이 화면은 |
| 이러한 이벤트를 요약하고, 사용자가 앱을 세부적으로 탐색할 수 있는 경로를 제공합니다. 이러한 스타일의 알림을 |
| <em>간접 알림</em>이라고 합니다.</p> |
| |
| <p>기본(직접) 알림과 달리, 간접 알림의 |
| 틈새 화면에서 Back 버튼을 누르면 백 스택에 다른 화면이 |
| 추가되지 않고 알림이 트리거된 지점으로 사용자를 이동시킵니다. 사용자가 |
| 틈새 화면에서 앱으로 들어가면, Up 버튼 및 Back 버튼은 위에서 설명한 바와 같이 틈새 화면으로 돌아가지 않고, 기본 알림과 마찬가지로 앱 내에서 |
| 탐색을 수행합니다.</p> |
| |
| <p>예를 들어 Gmail을 사용 중인 사용자가 캘린더로부터 간접 알림을 받았다고 가정해 봅니다. 해당 |
| 알림을 터치하면 틈새 화면이 열립니다. 이 화면에는 다른 |
| 여러 이벤트에 대한 알림도 표시됩니다. 틈새 화면에서 Back 버튼을 터치하면 Gmail로 돌아갑니다. 특정 |
| 이벤트를 터치하면 사용자를 틈새 화면에서 나오게 하여 |
| 해당 이벤트의 세부 정보를 보여주는 완전한 캘린더 앱으로 이동하게 됩니다. 이벤트 세부 정보 화면에서 Up 버튼과 Back 버튼을 누르면 캘린더의 최상위 뷰로 이동하게 됩니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_indirect_notification.png"> |
| |
| <h4>팝업 알림</h4> |
| |
| <p><em>팝업 알림</em>은 알림 창을 거치지 않고 바로 사용자에게 |
| 표시되는 알림입니다. <strong>팝업 알림은 시기적절한 |
| 응답이 요구되는 경우와 사용자의 컨텍스트를 중단하는 것이 필요한 경우에 한하여</strong> 드물게 사용됩니다. 예를 들어 |
| Talk는 친구가 화상 채팅에 참여하도록 보낸 |
| 초대를 사용자에게 알리기 위해 이러한 스타일의 알림을 사용하며, 이 초대는 몇 초 후에 자동으로 만료됩니다.</p> |
| |
| <p>탐색 동작 측면에서, 팝업 알림은 간접 |
| 알림의 틈새 화면 동작을 상당히 많이 따릅니다. Back 버튼을 누르면 팝업 알림이 해제됩니다. 사용자가 팝업을 |
| 통해 앱으로 이동하면, Up 및 Back 버튼은 기본 알림의 규칙에 따라 앱 내에서 |
| 탐색합니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_popup_notification.png"> |
| |
| <h2 id="between-apps">앱 간 탐색</h2> |
| |
| <p>Android 시스템의 본질적인 강점 중 하나는 앱이 |
| 다른 앱을 실행할 수 있다는 점이며, 이로 인해 사용자는 한 앱에서 다른 앱으로 직접 이동할 수 있습니다. 예를 들어, |
| 사진을 캡처해야 하는 앱은 카메라 앱을 작동시킬 수 있으며, 카메라 앱은 사진을 |
| 해당 앱으로 돌려줍니다. 이러한 기능은 개발자와 사용자 모두에게 매우 유용합니다. |
| 왜냐하면 개발자는 쉽게 다른 앱의 코드를 활용할 수 있고, 사용자는 흔히 수행하는 작업을 일관된 환경으로 |
| 즐길 수 있기 때문입니다.</p> |
| |
| <p>앱 간 탐색을 이해하려면 아래에서 |
| 설명하는 Android 프레임워크 동작을 알아야 합니다.</p> |
| |
| <h4>액티비티, 태스크 및 인텐트</h4> |
| |
| <p>Android에서 <strong>액티비티</strong>는 |
| 정보 및 사용자가 수행할 수 있는 모든 관련 작업이 포함된 화면을 정의하는 애플리케이션 구성 요소입니다. 앱은 본인이 직접 생성하는 |
| 액티비티와 다른 앱에서 재활용하는 액티비티로 구성되어 있는 액티비티 컬렉션입니다.</p> |
| |
| <p><strong>태스크</strong>는 사용자가 목적을 달성하기 위해서 따르는 일련의 액티비티입니다. 단일 |
| 태스크는 단 한 가지 앱의 액티비티만 사용할 수도 있고, |
| 여러 앱의 액티비티를 사용할 수도 있습니다.</p> |
| |
| <p><strong>인텐트</strong>는 어떤 앱이 작업을 수행하는 데 다른 |
| 앱의 도움을 받고자 한다는 신호를 보내는 메커니즘입니다. 앱의 액티비티는 |
| 어떠한 인텐트에 응답을 보낼 수 있는지 알려줄 수 있습니다. "공유하기"와 같이 일반적인 인텐트의 경우, 사용자는 해당 요청을 수행할 수 있는 여러 앱을 |
| 설치했을 수도 있습니다.</p> |
| |
| <h4>예: "공유하기"를 지원하는 앱 간에 탐색하기</h4> |
| |
| <p>액티비티, 태스크, 인텐트가 어떻게 같이 동작하는지 이해하려면 앱이 어떻게 사용자가 다른 앱을 사용하여 콘텐츠를 |
| 공유할 수 있도록 하는지 생각해 보세요. 예를 들어, 홈에서 Play 스토어 앱을 실행하면 새로운 태스크 |
| A가 시작됩니다(아래 그림 참조). Play 스토어에서 탐색하다가 홍보 도서의 세부 정보를 |
| 보기 위해 터치하면, 다른 액티비티를 추가하여 태스크를 연장하는 방식으로 사용자는 동일한 태스크에 머물게 됩니다. 공유하기 |
| 작업을 트리거하면 공유하기 인텐트를 처리하도록 |
| 등록된 액티비티(다양한 앱에서 제공)가 나열된 목록을 보여주는 대화 상자가 표시됩니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_apps_inward.png"> |
| |
| <p>사용자가 Gmail을 통해 공유하기를 선택할 경우, 새로운 태스크가 생성되는 것이 아니라 |
| 태스크 A의 연장으로 Gmail의 메일 작성 액티비티가 추가됩니다. Gmail의 백그라운드에서 실행되는 자체적인 태스크가 있을 경우, 해당 태스크는 아무런 |
| 영향도 받지 않습니다.</p> |
| |
| <p>메일 작성 액티비티에서 메시지를 보내거나 Back 버튼을 터치하면, 사용자는 |
| 도서 세부 정보 액티비티로 돌아가게 됩니다. Back 버튼을 연이어 터치하면 Play |
| Store에서 탐색한 페이지로 되돌아가게 되어 결국에는 홈 화면에 이르게 됩니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_apps_back.png"> |
| |
| <p>하지만 사용자가 메일 작성 액티비티에서 Up 버튼을 터치하는 것은 |
| Gmail에 남아 있고자 하는 의지를 보이는 것입니다. 따라서, 이 경우 Gmail의 대화 목록 액티비티가 표시되고, 새로운 태스크 B가 생성됩니다. 새로운 태스크는 |
| 항상 홈에 기반을 두고 있기 때문에, 대화 목록에서 Back 버튼을 터치하면 홈으로 되돌아가게 됩니다.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_apps_up.png"> |
| |
| <p>태스크 A는 백그라운드에 남아 있기 때문에 나중에 돌아올 수 있습니다(예를 들어, |
| 최근 앱 화면을 통해). Gmail에 이미 백그라운드에서 실행 중인 자체적인 태스크가 있을 경우, |
| 해당 태스크는 태스크 B로 대체됩니다. 이전 컨텍스트는 사용자의 새로운 목적에 따라 제거됩니다.</p> |
| |
| <p>앱 계층 구조 내의 액티비티에서 인텐트를 처리하도록 앱에서 등록하는 경우, Up 탐색을 지정하는 방법에 대한 지침을 확인하려면 |
| <a href="#into-your-app">홈 화면 위젯 및 |
| 알림을 통한 앱 탐색</a>을 참조하세요.</p> |