Korea Blog
안드로이드 디자인 문서 - 방향 탐색 (Navigation)
Tuesday, February 5, 2013
* 많은 안드로이드 앱에서 Back 및 Up 버튼 동작이 일관되지 않게 동작함으로 인해서 사용자들이 불편을 겪는 문제가 발생하고 있습니다. 해당 버튼들의 동작에 대한 개발자의 이해를 돕고자, 안드로이드 디자인 가이드에서 Navigation (방향 탐색) 섹션을 한글 문서로 포스팅합니다. 방향 탐색 기능 구현에 참고하시기 바랍니다.
이
전(Back) 및 상위(Up) 키로 방향 탐색
원문 링크:
http://developer.android.com/intl/ko/design/patterns/navigation.html
전반적인 사용자 경험에 있어서 일관적인 방향 탐색 기능을 제공하는 것은 필수적인 요소입니다. 일관성 없고 예상에 벗어나는 기본 탐색 기능처럼 사용자를 실망시키는 것도 드물겠죠. 안드로이드 3.0 에서는 글로벌 방향 탐색 동작에 중요한 변경 사항을 도입했습니다. 이전 및 상위 방향 탐색을 위한 본 가이드라인을 신중하게 이행하여 사용자가 예상 가능하고 신뢰할 수 있는 방향 탐색 기능을 제공하세요.
안드로이드 2.3 이하 버전에서는 앱 내부 탐색을 지원하기 위해서 시스템 이전(Back) 버튼에 의존했습니다. 하지만 안드로이드 3.0 에서는 액션바를 선보임으로, 앱 아이콘과 왼쪽 방향 탈자 기호( < )로 이루어진 제 2의 방향 탐색 장치인 상위(Up) 버튼이 소개되었습니다.
상위(Up) vs. 이전(Back)
상위 버튼은 화면간 계층 관계에 근거하여 앱 내에서 방향탐색을 하기 위해서 사용됩니다. 예를 들어, A 화면 에서 아이템 목록을 보여주면 아이템을 선택하여 B 화면(아이템 세부 내용 표시)으로 이동하게 되며, B 화면에서는 A 화면으로 돌아가기 위해서 상위 버튼을 제공해야 합니다.
화면이 앱에서 최상단에 있는 경우 (즉, 앱의 홈에 있는 경우), 상위 버튼은 보이지 않도록 합니다.
시스템 이전 버튼은 사용자가 최근에 본 화면 기록을 통해서 역순으로 탐색을 할 때 사용됩니다. 대체적으로 이전 버튼은 앱의 상하 계층이 아닌, 화면 간에 일시적인 관계에 근거하여 동작합니다.
이전에 본 화면이 현재 화면의 상위에 있을 경우, 이전 버튼을 누르면 상위 버튼을 누르는 것과 동일하게 동작하며 이는 흔히 발생하는 동작입니다. 하지만 사용자가 앱 안에서 머무르도록 하는 상위 버튼과 다르게 이전 버튼은 홈 스크린이나 다른 앱으로 사용자를 이동시킬 수 있습니다.
이전 버튼은 다음과 같이 화면 간 탐색과 직접적으로 연관되지 않은 몇몇 기능을 지원합니다.
플로팅 창 제거하기 (대화 상자, 팝업)
컨텍스트 액션바 제거, 선택 항목에서 하이라이트 제거하기
온스크린 키보드(IME) 감추기
앱 내에서 탐색하기
다중 진입점을 가진 화면 이동
어떤 화면은 앱의 계층 간에 엄격한 상하 구조를 가지고 있지 않아서 여러 진입점을 통해서 접근할 수 있습니다. 일례로 설정(Setting) 화면의 경우, 앱 내의 어떤 화면에서도 해당 화면에 접근할 수 있습니다. 이러한 경우에 상위 버튼은 이전 버튼과 동일하게 자신을 호출했던 화면으로 돌아가도록 합니다.
화면 내에서 뷰 변경하기
화면에서 뷰 옵션을 변경하는 경우에는 상위 또는 이전 버튼 동작을 변경하지 않습니다. 화면은 앱 계층 구조 안에서 여전히 동일한 위치에 있고 어떠한 탐색 기록도 새로 생성하지 않기 때문입니다. 이러한 뷰 변경의 예는 다음과 같습니다.
탭 및 또는 좌우 스와이프를 사용하여 뷰 전환
드롭다운을 사용하여 뷰 전환
목록 필터링
목록 정렬
표시 문자 변경 (줌 등)
동일 계층에 있는 화면 간 탐색
아이템 목록에서 각 아이템의 세부 내용로 이동하는 탐색을 앱에서 지원하는 경우, 해당 아이템에서부터 목록의 이전/이후 아이템으로 직접 이동할 수 있도록 지원하는 것이 바람질 할 때도 있습니다. 예를 들어 Gmail의 동일한 받은 편지함 내부의 메일에서 왼쪽 혹은 오른쪽으로 스와이프하여 신규 혹은 이전 메일을 쉽게 확인할 수 있습니다. 이때 화면 내에서 뷰를 변경하는 것과 마찬가가지로, 방향 탐색은 상위 또는 이전 버튼 동작을 바꾸지 않습니다.
하지만 참조하는 목록으로 엮여있지 않은 연관된 세부 뷰 사이를 브라우징할 때 주목할만한 예외 상황이 발생합니다. 예를 들어, Play 스토어에서 동일한 개발자가 만든 여러 앱이나 동일한 아티스트의 다양한 앨범을 검색하는 경우가 이에 해당됩니다. 이러한 경우에 각 링크를 따라가면서 기록을 생성하고, 이전 버튼을 통해서 이전에 본 화면으로 이동할 수 있습니다. 상위 버튼은 이러한 연관된 화면을 거치지 않고 가장 최근에 본 컨테이너 화면으로 이동해야 합니다.
세부 뷰에서 제공하는 정보에 근거하여 더욱 스마트한 상위 버튼 동작을 구현할 수 있습니다. 위에서 설명한 Play 스토어 예제를 연장해서, 사용자가 도서를 확인한 이후 해당 내용을 영화로 각색한 정보를 확인하기 위해서 세부 페이지로 이동했다고 가정해 봅시다. 그러한 경우에 상위 버튼은 사용자가 이전에 본적이 없는 컨테이너(영화)로 이동하게 할 수 있습니다.
홈 스크린 위젯 및 알림을 통해 앱으로 진입하기
홈 스크린 위젯이나 알림을 사용하여 사용자가 앱 계층안에 있는 화면으로 바로 이동할 수 있게 할 수 있습니다. 예를 들어, Gmail의 받은 편지함 위젯과 새 메일 알림은 모두 받은 편지함 화면을 건너뛰고 사용자가 해당 메일로 바로 이동할 수 있게 해줍니다.
이러한 경우 두 가지 모두, 상위 버튼은 다음과 같이 처리합니다.
도착 화면이 일반적으로 앱 내의 특정 화면에서 출발하는 것이라면 상위 버튼은 해당 화면으로 이동해야 합니다.
그렇지 않으면 상위 버튼은 앱의 최상위(“홈") 화면으로 이동해야 합니다.
이전 버튼의 경우, 태스크의 백스택에 앱의 최상위 화면으로 이동하는 모든 상위 탐색 경로를 삽입하여 방향 탐색을 더욱 예측 가능하게 만들어야 합니다. 이는 어떻게 앱에 진입했는지 망각한 사용자가 앱에서 나가기 전에 해당 앱의 최상위 화면으로 이동할 수 있게 해줍니다.
예를 들어 Gmail의 홈 스크린 위젯은 메일 쓰기로 바로 진입하는 버튼을 제공합니다. 메일 쓰기 화면에서 상위나 이전 버튼을 누르면 먼저 받은 편지함으로 이동하고, 받은 편지함에서 이전 버튼을 누르면 홈으로 돌아갑니다.
간접 알림 (Indirect notifications)
앱이 동시에 다양한 이벤트 정보를 표시해야 할 경우, 사용자를 삽입 화면(interstitial screen)으로 이동하게 하는 단일 알림을 사용할 수 있습니다. 이 화면은 이벤트를 간단히 설명하고 사용자가 해당 앱으로 진입할 수 있도록 경로를 제공합니다. 이러한 형태의 알림을 간접 알림(i
ndirect notifications)
이라고 합니다.
일반적인(직접) 알림과는 다르게, 간접 알림의 삽입 화면에서 이전 버튼을 누르면 백스택에 다른 화면이 추가되지 않고 알림이 발생한 시점으로 사용자를 이동시킵니다. 사용자가 삽입 화면에서 앱으로 진행하면, 상위 버튼과 이전 버튼은 위에 설명된 대로 삽입 화면으로 복귀하지 않고 일반적인 알림과 마찬가지로 동작하여 앱 내에서 탐색하게 됩니다.
예를 들어 Gmail 사용 중에 캘린더로부터 간접 알림을 받았다고 가정해 봅시다. 해당 알림을 터치하면 삽입 화면이 열리고, 다른 이벤트 알림도 보여주게 됩니다. 사용자가 이전 버튼을 누르면 Gmail로 복귀하게 됩니다. 특정 이벤트를 터치하면 삽입 화면에서 나오게 되고 캘린더 앱으로 가서 이벤트 세부 사항을 보여주게 됩니다. 이벤트 세부 사항에서 상위 버튼과 이전 버튼을 누르면 캘린더의 최상위 레벨로 이동하게 됩니다.
팝업 알림
팝업 알림은 알림 서랍(notification drawer)에 들어가지 않고 바로 사용자에게 보여주는 알림입니다. 팝업 알림은
사용자 응답이 적시에 요구되는 경우 및 사용을 중단하는 것이 필요한 경우
에 한정하여 드물게 사용됩니다. 예를 들어, 토크(Talk)는 영상 채팅 초대를 통보하기 위해 이러한 형태의 알림을 사용하며 몇 초 후에 자동으로 종료됩니다.
팝업 알림의 탐색 방식은 간접 알림의 삽입 화면에서 사용하는 방식과 밀접합니다. 이전 버튼은 팝업 알림을 제거합니다. 사용자가 팝업을 통해 앱으로 진입하면 상위 및 이전 버튼은 표준 알림으로 앱 내를 탐색하는 방식과 동일하게 동작합니다.
앱 간의 방향탐색
안드로이드 시스템의 근본적인 강점 중에 하나는 앱이 다른앱을 실행해서 사용자가 한 앱에서 다른 앱으로 직접 이동할 수 있게 해주는 기능입니다. 예를 들어, 사진 찍는 기능이 있는 어떤 앱에서 카메라 앱을 활성화시킬 수 있는데, 카메라 앱은 사진을 관련 앱으로 리턴해 줍니다. 개발자는 쉽게 다른 앱의 코드를 사용할 수 있고 사용자는 일반적으로 수행되는 동작에 일관적인 경험을 누릴 수 있기에 개발자와 사용자 모두에게 큰 유익을 줍니다.
앱간 탐색을 이해하려면, 아래에서 다루는 안드로이드 프레임워크 동작을 이해하는 것이 중요합니다.
액티비티, 태스크, 인텐트
안드로이드에서
액티비티(activity)
는 사용자가 수행할 수 있는 모든 관련 동작 및 정보에 관한 화면을 정의하는 애플리케이션 컴포넌트입니다. 앱은 본인이 생성한 액티비티와 다른 앱에서 재사용한 액티비티로 구성되어 있는 액티비티의 집합입니다.
태스크(task)
는 사용자가 어떤 목적을 달성하기 위해서 따르는 일련의 액티비티입니다. 단일 타스크는 단 하나의 앱에서 제공하는 액티비티만을 사용할 수도 있고, 여러 다른 앱의 액티비티를 사용할 수도 있습니다.
인텐트(intent)
는 어떤 앱이 동작 수행을 하는데 다른 앱의 도움을 받고자 한다는 신호를 보내는 매커니즘입니다. 앱의 액티비티는 어떤 인텐트에 응답을 보낼 수 있는지 알려줄 수 있습니다. “공유하기"와 같이 흔히 사용하는 인텐츠의 경우, 사용자는 해당 요청을 수행할 수 있는 여러 앱을 설치했을 수도 있습니다.
예제: 공유 지원을 위한 앱간의 방향탐색
액티비티, 태스크, 인텐트가 어떻게 동작하는지 이해하기 위해, 한 앱에서 다른 앱을 사용하여 어떻게 콘텐츠를 공유할 수 있는지 생각해 보겠습니다. 예를 들어, Play 스토어 앱을 홈에서 론치하는 것은 새로운 태스크 A를 시작하는 것입니다 (아래 그림 참조). Play 스토어에 들어가서 탐색하고 홍보 도서의 세부 사항을 살펴보기 위해 터치하면 다른 액티비티를 추가하여 연장함으로써 사용자는 동일한 태스크에 머물러 있습니다. 공유하기 액션을 실행하면 공유하기 인텐트를 처리하기 위해 등록된 액티비티 목록( 다른 앱에서 제공하는)을 보여주는 대화상자를 보여줍니다.
사용자가 Gmail로 공유하기를 선택했을 경우, Gmail의 메일 쓰기 액티비티가 새로운 태스크가 생성되는 것이 아니라 태스크 A에 연이어 추가됩니다. Gmail이 백그라운드로 실행되는 자신의 태스크를 가지고 있다 하더라도 아무 영향도 받지 않습니다.
메일 쓰기 액티비티에서, 메일을 보내거나 이전 버튼을 터치하면 사용자가 도서 세부 항목 액티비티로 돌아가게 됩니다. 이어서 이전 버튼을 터치하면 Play 스토어를 통해서 되돌아가게 되어 결국에는 홈 화면에 이르게 됩니다.
하지만 메일 쓰기 액티비티에서 상위 버튼을 터치하면 사용자는 Gmail에 남고자 하는 의지를 보이는 것입니다. Gmail의 메일 목록 액티비티가 보이고, 이를 위해 새로운 타스크 B가 생성됩니다. 새로운 태스크는 항상 홈에 시작을 두고 있기 때문에, 메일 목록에서 이전 버튼을 터치하면 홈으로 복귀하게 됩니다.
태스크 A는 백그라운드에 남아있기 때문에 사용자가 이후에 돌아올 수 있습니다 (예를 들어, 최근 앱 화면 화면을 통해서). Gmail이 이미 백그라운드에서 실행하는 자신의 태스크를 가지고 있다면, 태스크 B로 대체되게 됩니다. 이전 상황은 사용자의 새로운 사용 목적에 따라 제거되는 것입니다.
앱 계층 내에서 액티비티가 인텐트를 처리하기 위해 등록하는 경우에 상위 탐색 구현 방법에 대한 가이드는
홈 스크린 위젯 및 알림을 통해서 앱으로 진입하기
를 확인하세요.
개발자 가이드
올바른 상위 버튼 및 이전 버튼 탐색으로 앱을 개발하기 위한 세부 정보를 확인하려면, 각각
Implementing Ancestral Navigation
과
Implementing Temporal Navigation
를 참조하세요.
No comments :
Post a Comment
ラベル
ad
AdMob
admob_sdk
Advanced Power Searching
Android
Android App Quality
android back button
Android back end
Android navigation
Android Player API
android server
android up button
androidL
androidtv
androidwear
App Translate Service
Audio Focus
Chrome
Chromecast
Code-in 2012
Core App Quality Guidelines
Daydream
design
designing for Tablets
designsprint
dialog
Drive SDK
Game Developers Conference
GCi
GCi 참가자
GDA
GDC
gdg
gdgkorea
Go
Google Cast
Google Code-in
Google Play
Google Play 스토어
Google Search
Google Summer of Code
Google+ Sign-In
Google+ Sign-In Bootcamps
Google+ 로그인
Google+ 로그인 부트캠프
googleanalytics
googleio
GooglePlay #AndroidDevStory #PlayStore #MaterialDesign #AndroidStudio #DeveloperConsole
GSOC
hackathon
HackFair 출품작
In-app Billing
io
io2014
ioapp
iobytes
ioextended
IRC Talk
IRC 서버
java7
kitkat
launch
Marshmallow
materialdesign
mobile ad
mobile_ads_sdk
multiscreen
NaCl
Native YouTube Player API
NRRN 사용 제한
Power Searching
product launch
SD 카드에 앱 설치
SecureKeyFactory
ux
webview
YouTube
YouTube Android Player API
YouTube API
YouTube API 3.0
YouTube API Update RSS Feed
광고
구글 HackFair
구글 Summer of Code
구글 개발자 사이트 홍보
구글 개발자 아카데미
구글 개발자 온라인 강좌
구글 검색
구글 고급 파워 서치
구글 드라이브 앱
구글 부트캠프
구글 아카데미
구글 코드인
구글 플러스 로그인
구글 핵페어
구글로 로그인하기
네이티브 클라이언트
데이드림
멀티 모바일
멀티 플랫폼
모바일 광고
수익화
스마트 브라우저
안드로이드
안드로이드 4.2
안드로이드 Back 버튼
안드로이드 Up 버튼
안드로이드 개인 정보 보호 정책
안드로이드 네비게이션
안드로이드 데이드림
안드로이드 디자인
안드로이드 방향탐색
안드로이드 보안
안드로이드 사용자 데이터
안드로이드 서버 백엔드
안드로이드 앱 품질
안드로이드 원격 제어
안드로이드 태블릿 디자인
안드로이드 현지화
안드로이드 화면 보호기
애드몹
애플리케이션 SD카드 설치
애플리케이션 개발 주민등록번호 사용 제한
애플리케이션 외부 저장 장치
앱 품질 체크리스트
오픈 소스
오픈소스 프로그램
웹 DMB
유튜브
유튜브 API
유튜브 API 3.0
유튜브 API 업데이트
유튜브 모바일
유튜브 안드로이드 플레이어 API
인앱 결제
인터넷상 주민등록번호 수집 이용 제한
주민등록번호 사용제한
추천이미지
출시
크롬브라우저
태블릿 디자인
태블릿용 앱
파워서치
한국 구글 개발자
한국 구글 개발자 사이트
핵심 앱 품질 가이드라인
핵심 태블릿 앱 품질 체크리스트
핵페어
핵페어 출품작
ブログ アーカイブ
2016
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
소셜 스팸 없이 간단하고 안전하게, Google+ 로그인
YouTube API 업데이트 따라잡기
인터넷상 주민등록번호 사용 제한법 - 앱에도 해당됩니다!
2013년에도 “Google Summer of Code”가 개최됩니다.
안드로이드 사용자 데이터 처리
안드로이드 애플리케이션 SD 카드에 설치하기
안드로이드 디자인 문서 - 방향 탐색 (Navigation)
한국 구글 개발자 사이트를 홍보해 주세요!
January
2012
December
November
October
September
August
July
June
May
March
February
January
2011
December
November
Feed
No comments :
Post a Comment