취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

제목:

제스처 네비게이션 바에 대한 고찰

(게시글 작성 시간: 03-04-2020 07:33 PM)
3832 보기
Bluesion
Active Level 8
옵션
기타

안드로이드 10으로 올라오면서 새로운 제스처 바가 추가되었습니다.
아이폰과 거의 똑같으면서도 어딘가 다른 제스처 바 때문인지, 생각보다는 많은 분들이 만족하지는 않으시더라고요.


아이폰처럼 달랑 네비게이션 바만 화면에 있는 게 아니라, 안드로이드는 제스처 바 공간을 따로 만들었으니 부자연스럽다는 말이 가장 많은 것 같습니다.

그래서 왜 제스처 바 공간이 따로 있는지 제가 직접 알아보았습니다.

 


1. 네비게이션 바 == 제스처 바
기본적으로 제스처 바는 네비게이션 바의 축소형입니다.

기존 네비게이션 바의 높이를 줄이고, 3개의 버튼(뒤로가기, 홈, 최근화면)을 없애고, 길쭉한 바(bar) 모양의 버튼을 추가한거예요.

 

다시 말하면, 네비게이션 바와 제스처 바의 베이스는 같습니다.

그래서 네비게이션 바의 속성이 제스처 바에도 그대로 적용이 돼요.

 

제스처 바라는 컴포넌트가 새로 생긴 게 아니라, 기존 네비게이션 바를 개조해서 만든 게 제스처 바입니다.

(https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/shared/src/com/...)

 

그래서 제스처 바 공간이 따로 생길 수 밖에 없던 거예요. 이건 태생적 한계입니다.
구글이 제스처 바 컴포넌트를 새로 만들지 않는 이상, 어쩔 수 없이 제스처 바 공간이 존재할 수 밖에 없는 것이죠.

 


2. 왜 제스처 바를 따로 만들지 않았나?
여기서 '왜 제스처 바를 새로 만들지 않고 네비게이션 바를 수정해서 만들었냐?' 는 의문이 들 수 있는데, 이 질문에 대한 답을 찾을 수는 없었습니다.
이건 전적으로 구글 마음이니까요 ㅎㅎ

 

제 머릿 속에는 여러가지 이유들이 떠오르긴 하는데, 그 중 가장 유력한 것만 궁예질 하자면...
이전 버전과의 호환성 때문이겠죠.

(여러가지 이유가 복합적으로 작용했겠지만, 호환성 문제가 가장 컸을 것으로 생각해요)

 

예시를 하나만 들자면, 제스처 바 공간이 따로 있을 때와 없을 때의 bottom navigation 모습입니다.

 

01.png

 

 

Bottom navigation이 가장 대표적인 예일 뿐이고, 이 외에도 모든 것들이 제스처 바와 호환이 제대로 안될 수 있습니다.


특히, 삼성은 One UI를 채택하면서 대부분의 컨트롤 컴포넌트들을 화면 하단에 배치하는 모습을 보여주는데 (특히 탭을 맨 밑에 배치), 제스처 바를 따로 만들었을 때의 가장 큰 피해자는 삼성이었겠죠... ㅎㅎ

 

제스처 바의 원조인 애플도 일부 앱에서는 이를 컨트롤하지 못하는 모습을 보여주더라고요.

내용과 제스처 바가 겹치는 모습을 보실 수 있습니다.

 

02.png

 

 


3. 제스처 바 사용시에만 하단에 위치한 컴포넌트에 자동으로 여백을 줄 수 없는가?
단순히 여백만 주면 끝나는 문제도 아닐 뿐더러, 너무 비효율적입니다. 현재 안드로이드에서 제공하는 컴포넌트는 정말 수 없이 많습니다.


수백개의 컴포넌트를 제스처 바에 맞게 일일이 수정할 바엔, 차라리 제스처 바 공간을 따로 배치하는 게 훨씬 낫습니다.

 


지금까지 제스처 바 공간이 있어야 하는 이유를 알아보았는데, 이쯤에서 또 다른 의문이 생깁니다.

 

'제스처 바 공간이 있는 건 좋은데, 제스처 바 배경을 투명하게 만들 수 없는건가?'


결론부터 말하자면, 투명하게 만들 수 있습니다. 다만, 앱 개발자가 따로 투명하게 만들어줘야 합니다.

 


4. Edge-to-edge
엣지 투 엣지는 안드로이드 10에서 처음 나온 용어입니다. 기존 상단바와 네비게이션 바 영역까지 앱 컨텐츠를 늘려서 보여주는 걸 말해요.

 

03.gif

 

 

사실 용어 자체는 이번에 처음 나왔지만, 상단바와 네비게이션 바까지 컨텐츠를 보여주는 개념 자체는 안드로이드 4.4 킷캣부터 존재했습니다.


킷캣에서 처음 Translucent 테마를 내놨고, 사실 이 테마를 많이 쓰지는 않았습니다.

기본 런처나 일부 E-book 앱에서만 쓰였을 뿐...

 

04.png

 

 

어쨌든 상단바와 네비게이션 바 배경을 투명하게 바꾸는 것 자체는 킷캣부터 지원하던 기능이었습니다. (생각보다 역사가 깊죠?)

 

하지만, 전과는 달리 안드로이드 10에서는 다소 복잡한 방법으로 edge-to-edge를 구현해야 합니다.
inset을 이용하여 컴포넌트에 padding을 적용하는 건데, inset이라는 개념은 개발자들에게도 생소하죠.

구글에서도 inset이 어려운 개념인 걸 인정하고 있을 정도...

 

어떤 방법으로 edge-to-edge를 구현해야 하는지는 굳이 이 글에서 설명하지는 않겠습니다.

이곳은 앱 개발자 커뮤니티가 아니고 삼성 멤버스니까요 ㅎㅎ

 

저 역시도 여러번 시행 착오를 겪어서 edge-to-edge 디자인을 완성해봤습니다.

 

05.png

 

 

생각보다 어려운 작업이었습니다. 기존의 fitsSystemWindows, clipToPadding 속성과 겹치는 부분도 있어서 애를 많이 먹었고, inset 개념도 그렇고...

 

구글에서는 안드로이드 10 이상에서 엣지 투 엣지 디자인을 "강력하게 권장" 하고 있는 중입니다. (안드로이드 9까지는 "선택"사항이라고 남겨두었네요)


강력하게 권장하고 있다고는 하지만, 여전히 강제사항은 아닙니다.

왜 강제사항이 아닌지에 대한 여러가지 이유가 떠오르긴 하는데, 제 생각에 가장 유력한 이유는 굳이 강제사항으로 만들 필요가 없기 때문이 아닐까 싶어요.

edge-to-edge가 굳이 필요 없는 앱들이 지금도 많이 존재하거든요.

 

글이 많이 옆으로 나간 것 같은데, 요약하자면 edge-to-edge 디자인을 적용하면 제스처 바 배경을 투명하게 만들 수 있다는 겁니다.


말 그대로 권장사항이기 때문에 기본 적용이 아닌 앱 개발자 자율 적용 형태로 된 것이고요.

 

그리고 결정적으로 기본 적용이 아닌 이유는, 애초에 제스처 바 사용이 강제가 아니기 때문이죠.


설정에서 기존의 3버튼 네비게이션과 제스처 바를 고를 수 있는 상황인데, 엣지 투 엣지 강제 적용이 가능할리가 없습니다.

왜냐하면 3버튼 네비게이션에서는 굳이 edge-to-edge가 필요하지는 않거든요.


다시 말하지만, 3버튼 네비게이션과 제스처는 태생이 같기 때문에, 어느 한쪽에만 효과를 적용할 수가 없어요.

 

그래서 구글은 scrim 효과도 제안하는 중입니다.
scrim 효과도 옛날에 테마 작업할 때 썼던 건데, 안드로이드 10에서 다시 만날 줄은... ㅎㅎ

 

06.png

 

 

제스처 바를 투명하게 만들면, 네비게이션 바는 알아서 scrim 효과가 들어가더라고요. 신기했습니다.

 

07.png

 

 

스크림 효과는 일부 저사양 기기에서도 기본 적용될 수 있습니다.
안드로이드 10부터는 상단바/네비게이션 아이콘을 시스템이 알아서 결정해줍니다.
아래 움짤에서 보시면 알겠지만, 배경 색상에 따라서 제스처 바 색상이 변하죠?

 

08.gif

 

 

이를 Dynamic color adaptation이라고 부르는데 (줄여서 DCA라고 하겠습니다),

 

이 DCA가 사양을 많이 타는 기능이에요. 그래서 구글에서는 DCA 기능을 탑재할지 말지는 제조사가 알아서 결정하라고 한 것 같습니다.

 

삼성 S/노트 시리즈에는 DCA 적용이 될 것 같은데, 그 미만 기종 (A, M 시리즈)에 탑재가 되었는지 아닌지는 제가 직접 확인을 못해봤습니다.


아래는 S10+에서의 DCA 사진입니다.


09.png

 

 


5. 마치며

이제 네비게이션 바와 제스처 바에 대한 의문이 조금은 풀리셨나요?


사실 제 뇌피셜도 꽤 많이 들어간 글이라 어쩌면 틀린 부분도 많을 수 있어요.
최대한 정확하게 쓰려고 노력했는데, 제가 구글 개발자가 아니라... ㅎㅎ

그냥 "아... 그렇구나..." 하고 가볍게 넘기는 글이 되었으면 좋겠습니다.

 

저 역시도 이번에 공부하면서 이제 좀 제스처 바와 친해진 느낌이 들었습니다.
공부한 내용을 바탕으로, CheckFirm과 Volt에 엣지 투 엣지 디자인을 적용해볼까 생각 중입니다.

 

마지막으로,
틀린 부분이 있으면 언제든지 댓글로 지적해주세요. 최대한 빨리 수정하겠습니다.


앞으로도 종종 안드로이드 소식 들고 오겠습니다.
감사합니다.

21 댓글
JINU_
Expert Level 5
기타
다른 영양가 없는 글들과 다르게 잘 봤습니다. 앞으로 자주 보면 좋겠네요.
Bluesion
Active Level 8
기타

감사합니다. 종종 찾아뵙겠습니다 ㅎㅎ

아띠
Active Level 5
기타
전문지식이 풍부한 님의 정성 가득한글로 나이많은 할미가 열심히 깨우치고 있습니다.
이런 글들..너무 고맙고 감사해요.
Bluesion
Active Level 8
기타

너무 어렵게 쓴 글인가 싶어서 초안 작성하고 수십번을 수정했는데, 여전히 부족한 글로 보이네요.

부족한 글이지만 오히려 아띠님께서 잘 이해해주셔서 제가 더 감사합니다.

민수레기
Active Level 10
기타
정말 깔끔하게 설명해주셔서 애매했던 부분들도 쉽게 이해했습니다👍👍
Bluesion
Active Level 8
기타

긴 글 끝까지 읽어주셔서 감사합니다! 도움이 되었다니 정말 다행입니다.

Bizet
Active Level 10
기타
생각보다 간단한게 아니었군요 친절한 설명 감사합니다
Bluesion
Active Level 8
기타

저도 이번에 공부하면서 알게된건데, 생각보다 많이 복잡하더라고요.. ㅎㅎ

너천재
Expert Level 5
기타
아이폰같은 부분을 원했는데 그건 힘들겠네요ㅠㅠ
Bluesion
Active Level 8
기타

현재 구조상으로는 힘들 것 같아요 ㅜㅜ

지금도 아이폰 똑같이 베껴왔다고 욕 먹고 있는데, 나중에 혹시라도 있을 수 있는 특허 소송 문제를 피하고 싶어서 그랬던건지...

배규민
Expert Level 3
기타
이분이 CheckFirm과 Volt개발자셨네요😱
CheckFirm이랑 Volt잘 쓰고 있습니다!
감사합니다!
Bluesion
Active Level 8
기타

헉,,, 제가 더 감사합니다!

Anonymous
해당 사항 없음
기타
방법이 생각났어요! 제스처바 배경을 추가한다음에 투명도를 100%로 하면 여백이 생기겠네요!
Bluesion
Active Level 8
기타

말씀하신 게 현재의 안드로이드 제스처 바 메커니즘이에요... ㅎㅎ

 

다만 단순히 투명도를 100%로 설정한다고 해서 되는 건 아니에요. 애초에 앱 레이어가 네비게이션 바 공간까지 그려지는 게 아니라 투명도 100%를 설정한다고 해도 아마 검은색으로만 나올 거예요. (혹은 windowBackground 색이 나오겠죠)

 

좋은 아이디어지만 현재는 안드로이드 구조상 불가능해요 ㅜㅜ

Anonymous
해당 사항 없음
기타
그럴까요? 안드로이드에서도 고민을 좀 해봐야 될 것 겉네요.
Bluesion
Active Level 8
기타
맞습니다 ㅜㅜ
이전 버전과의 호환성을 포기하고 새로 갈아 엎으면 유저들이 원하는 방향으로 나갈 수 있긴 한데, 구글한테도 이게 쉬운 일은 아니라... 반발이 엄청 거셀 거예요.

개인적으로는 현재 제스처 바도 충분히 괜찮다고 생각하는데, 더 나은 사용자 경험을 위해선 발전이 필요해보입니다.
기타
외래어 표기법 상 네비게이션이 아니라 내비게이션입니다.
Bluesion
Active Level 8
기타

오 이번에 알아가네요. 좋은 정보 감사합니다~

글을 읽는데 큰 지장은 없는 것 같고, 많은 분들이 네비게이션으로 알고 있는만큼, 글의 조회수를 위해서 수정을 하지는 않겠습니다.

0 좋아요
기타
와!!! 정말 어마어마한 글이네요.. 궁금했던 점이 한 방에 해결되었습니다.. 🤩🤩🤩

자료 수집하고 정리하시느라 최소 몇 시간을 투자하셨을 것 같아요.. 고생 많으셨구요.. 좋은 정보 공유 감사합니다. 🤗
Bluesion
Active Level 8
기타

댓글을 늦게 봤네요... 칭찬의 말씀 감사합니다~

서태진
Expert Level 4
기타
제스처의 시초는 아마 블벡인거같네욬ㅋ
0 좋아요