유혁의 개발 스토리

[Android] 카카오톡 페이지 만들기(PagerSlidingTabStrip + Viewpager) 본문

Android

[Android] 카카오톡 페이지 만들기(PagerSlidingTabStrip + Viewpager)

유혁. 2017. 9. 12. 15:10

안드로이드 개발자 유혁입니다.

이전에 Viewpager와 FragmentTabhost를 이용한 카카오톡 페이지를 만들어 보았습니다.

위 두 가지 방식은 카카오톡 페이지라고 하기에 2%부족한 느낌을 주는 방식이였습니다.

ViewPager는 현재 상태의 대한 띠가 없고, FragmentTabhost는 좌우 스크롤이 안되는 맛있어보이지만 맛없는 느낌을 주었습니다. 이번에 포스팅하는 카카오톡 페이지는 오픈소스로 이루어진 PagerSlidingTabStrip + Viewpager를 이용하여 실제 카카오톡과 비슷한 환경으로 제작을 해 보겠습니다.

 

 

결과

 

 

1. build.gradle(Module:app) 라이브러리 추가.

 

compile 'com.astuetz:pagerslidingtabstrip:1.0.1'

 

Sync Now 버튼을 클릭합니다(우측 상단에나옵니다.)

 

 

2. 어플리케이션 구조(Application Structure)

 

 

fragment와 adapter를 따로 구분지어 패키지를 만들었습니다. 안드로이드 개발에 하나의 패키지의 모든 클래스를 넣으면 복잡하고 유지보수하기가 너무 어렵습니다. 저도 개발하고 일주일뒤에 다시보면 새로운 느낌을 받습니다. 최대한 정리를 잘 해주시기 바랍니다. 더 나아가면 MVC, MVVP, MVP 패턴들이 있으니 참고 하시면 도움이 될 것입니다.

 

adapter는 fragmentpage를 관리해주며 fragment패키지 내에 각각 페이지에 상응하는 fragment가 존재합니다.

layout에는 안드로이드 화면을 제공해주는 View로 구성되어 있으며 layout은 패키지로 분리해서 나눌 수 없으므로 초기에 구분이 쉽게 이름을 설정해 주도록 합시다.

 

 

 

 

3. 프로그램 동작 Flow

 

저는 에제를 보여주기 때문에 MainActivity에서 바로 카카오톡 페이지를 보여주는 어플리케이션입니다. 좀더 완성감 있게 하려면 초기에 Splash Activity를 넣어주면 근사한 프로그램이 될 것입니다.

http://yoo-hyeok.tistory.com/31

Splash Activity가 무엇인지 사용하는 방법은 위 링크에서 정보를 얻을 수 있습니다.

 

메인엑티비티에 Viewpager를 선언과 동시에 adapter를 설정시킵니다.

어뎁터에서 fragment를 할당해주어 카카오톡 페이지를 만들어 줍니다.

자세한 설명은 소스를 보면서 하겠습니다.

 

 

4. 프로그램 소스

 

제어부분(JAVA)

 

MainActivity.class

 

18~25 : PagerSlidingTabStrip + Viewpager 선언부

20 : Viewpager 특성상 여러 페이지를 한꺼번에 로드하는것이 아닌 현재 페이지에서 다음 페이지 정도만 로드하므로 여러 페이지를 한꺼번에 로드 하기위한 메소드 (예제에서는 의미없는 메소드 없어도 된다.)

 

 

SampleFragmentPagerAdapter.class

 

25 : 상단 메뉴를 텍스트로 지정

26 : 상단 메뉴를 이미지로 지정

40 ~ 48 : 특정 객체는 생성될때 ~~조건문 (어떤 페이지에서 ~~조건을 주고싶다)

69 : 페이지 제목 텍스트로 전달

76 :  이미지 정수값(R.drawable.flower) 전달

 

FirstFragment.class

 

54 : ListView 생성

70 : ListView 어뎁터를 이용한 생성

89 : 만들어둔 CustomListView로 생성

 

SecondFragment.class

 

기본적인 Fragment 페이지

 

ThirdFragment.class

 

기본적인 Fragment 페이지

 

 

 

 

 

View화면(XML)

 

activity_main.xml

 

 

 

custom_listview_one.xml

 

CustomListView 레이아웃으로 사용자가 원하는 형태로 View를 꾸며 사용 가능(이미지뷰 추가 등등)

 

fragment_one.xml

 

 

 

fragment_two.xml

 

 

 

fragment_zthree.xml

 

 

View부분은 간단합니다. 설명은 생략하겠습니다.

궁금하신것은 댓글 남겨주시면 답변드리겠습니다.

 

 

 

후기

 

카카오톡 페이지는 ListView로 Fragment가 처리되기 때문에 ListView를 사용하였고 사용자 입맛에 맞게 적용하기 위해서 CustomListView로 제작하는 방법이 같이 설명되어 있습니다.

다른 방법보다 많은 뷰와 제어를 가지고 있어 처음 접하시는 분들에게는 이해가 안될 것이라 예상됩니다.

사전 지식으로는 ListView에 대한 개념과 CustomListView 제작, fragment의 이해, 외부 라이브러리 사용경험 정도 알고계시면 충분히 이해 가능하다 생각합니다. 전체적으로 설명이 부족하거나 알고싶으신 내용은 댓글 남겨주시면 답변드리겠습니다. 감사합니다.