포지션 페이지 디자인 개선 적용하기

김종식
원티드랩 기술 블로그
5 min readMay 29, 2018

원티드 안드로이드앱 4.1.5 버전에서 채용 정보 상세 페이지가 리뉴얼 되었습니다. 어떤것을 고민하여 반영하였으며, 어떻게 개발을 하였는지 정리해 보았습니다.

디자인 변경사항

<4.1.5 이전버전과 이후 버전>

개발자 시각에서 바라본 변경된 부분은 아래와 같습니다.

- 포지션 공고 마감 표시 추가
- 관련된 포지션 디자인을 홈 화면의 잡 카드와 동일한 레이아웃으로 통일
- '좋아요'를 선택한 사람을 이미지로 표시 (최대 3개)
- 북마크 버튼을 별도로 Toolbar 영역으로 이동

디자인 관점에서 정리를 해보자면, 전반적으로 잡 포지션 화면이 각 영역을 기능 단위로 좀 더 명확히 분리되고 묶는 방향 으로 리뉴얼 되었습니다.

대표적인 예로 좋아요 버튼 및 좋아요를 한 사람을 표시하는 영역은 좀 더 일반적인 기능 영역이라면 북마크 기능은 좀 더 개인화된 기능이므로 우측 상단으로(Toolbar Options menu) 이동되었습니다. 각 영역을 구분하기 위한 선을 많이 없앴지만 기능이 직관적으로 보일 수 있도록 개선되었습니다.

그리고 기존에 상단 회사 이미지 영역을 덮고있던 보상금 정책이 1)회사 그림을 가리고 있어서 지저분한 느낌이 있었고, 2)공유하기 기능과 약간 떨어져 있어서 혜택과 기능을 함께 표시 될 수 있도록 개선 되었습니다.

잡 포지션에서는 확인중인 포지션과 관련된 포지션을 확인 가능한데요, 잡 카드 형태를 홈 화면의 카드형태와 동일하게 수정하였습니다. 지원하기 버튼은 하단 버튼 영역 전체를 사용함으로써 포지션 상세 화면에서 할 수 있는 행동이 더 잘 보여주도록 개선되었습니다.

진입 코드 리팩토링

포지션 상세 화면 Activity 를 호출하는 코드는 굉장히 많이 산개되어 있었습니다. 앱 내부에서 Intent 를 생성하여 상세화면을 진입하거나, 외부에서부터 Deeplink 로 진입하는 케이스등 다양한 케이스에 대하여 Intent가 산발적으로 존재하고 있습니다.

먼저 잡 상세 화면을 실행하는 코드를 static method 로 정리하고, 각 잡 상세 화면에 진입하는 코드들은 상세 화면 Activity 를 호출하는 부분들을 찾아서 앞에서 정리한 Activity 의 static method 를 이용하여 잡 상세 화면을 실행 하도록 코드를 정리 하였습니다.

진입 코드가 정리가 완료 되었으므로 실제 실행하는 코드의 Intent 의 타겟 Activity만 리뉴얼 작업 Activity로 교체하여 디자인과 구조를 잡기 시작했습니다.

RecyclerView 로 변경

크게 변경된 점이라고 하면, 기존에는 NestedScrollView 하위에 include layout 으로 여러 개의 뷰가 구성되어 있었다고 한다면, 이번에는 RecyclerView 로 포지션 상세 UI 구성을 변경한 부분입니다. 기존의 화면 상단 이미지 영역은 AppBarLayoutCollaspingToolbarLayout 를 활용하였으며, 하단 영역은 아래와 같이 5가지의 뷰타입 및 ViewHolder 로 구성하였습니다.

뷰 모델 구조 작업

상세화면은 Activity 는 먼저 ViewModel을 생성하고, 여기에서 화면에 필요한 각 데이터들을 LiveData 로 관리하도록 구성하였습니다. API 통신이나 사용자 행동 등으로 변경이 발생되는 것은 각 ViewHolder가 observe 하는 것으로 정리하였습니다. 예를들어, 가장 상단의 ViewHolder 의 코드는 다음과 같습니다.

viewModel 이 가지고있는 job 은 상세 화면에 진입 전 알고있는 데이터(목록 등에서)이며, detail 은 실제 상세화면에 진입 이 후 API 통신을 통하여 데이터가 갱신된 내용을 의미합니다.

ripple effect with radius corner

일반적으로 Ripple Effect 를 corner radius 가 있는 형태로 적용하려면 selector 를 만들고, API 21 에 따라 다르게 동작하게 해야 합니다. 이번에는 약간의 편법을 이용해서 Corner radius 만큼 ripple 를 적용되게 하도록 처리하였는데, 바로 CardView 를 활용하는 것입니다. CardView의 속성 중 cardCornerRadius 를 설정하게 되면 이 영역을 제외한 부분만큼은 View 가 그려지게 됩니다. 따라서, CardView 하위에 선택 영역을 ViewGroup 으로 clickable 하게 구성을 하면 됩니다.

예를들어 좋아요를 한 사람들 목록표시하는 부분의 ‘…’ 버튼 레이아웃은 아래처럼 되어있습니다.

편법이긴 하지만 잘 동작 합니다. 다만 이러한 방법을 사용하였을 경우에는 안드로이드 5.0이상, 미만버전 두 가지 케이스에 대하여 실제 CardView 가 radius 속성에 의하여 그려지는 영역이 차이 가 나게 되어있기 때문에 레이아웃이 약간 다르게 표시될 수 있습니다.

<Pressed 시 영역 차이가 있습니다.>

해당 부분은 좌 우 버튼이 동일한 radius를 사용하여 inset value가 같고, 디바이스 점유율이나 기능 사용 측면에서 봤을 때 크리티컬한 이슈는 아니라고 판단되어 현 상태로 진행 하였습니다.

--

--