- Fragment
- ViewPager2
- 중요과제 2
- Fragment
Fragment 는 Activity 보다 살짝 작은 단위로 생각하면 됩니다. Fragment 를 사용하기 위해서는 반드시 Activitiy 에서 Fragment 를 추가해야 하고, 한 Activity 안에 여러 개의 Fragment 를 갖고 있을 수도 있습니다. 또한 여러 Activity 에서 같은 Fragment 를 사용할 수도 있습니다. 카카오톡처럼 Activity 하단에 메뉴 탭이 존재하고 어떤 탭을 누르냐에 따라 보이는 컨텐츠를 다르게 하려면, 이 컨텐츠들을 Fragment 로 구성할 수 있습니다.
Fragment 도 Activity 와 비슷한 생명주기를 갖습니다. 기본적으로 Activity 의 생명주기를 갖고 있고, Fragment 를 연결하거나 떼어내는 부분이 추가되었습니다. 더 자세한 내용
이번 스터디도 새로운 모듈을 만들어서 진행하도록 하겠습니다.
모듈을 새로 만들면 기본으로 생성해 주는 이 액티비티(에서 살짝만 바꿈)를 Activitiy 와 Fragment 로 분리해 보도록 하겠습니다. fragment 에서는 TextView 를 출력하고, activity_main 에서 이 fragment 를 포함하는 구조로 작성하겠습니다. 일단 fragment 를 만들어야 합니다. Activity 를 만드는 것과 비슷합니다.
Activity 를 만들면 xml 과 kt 파일이 생성되는 것처럼, Frgment 를 만들기 위해 MyFragment.kt 와 fragment_my.xml 파일을 생성해 주었습니다. xml 파일에서는 화면에 출력할 UI 작업을 합니다.
fragment_my.xml 에 activity_main 에 있던 UI 를 가져왔습니다. 여기서는 하나(layout 까지 합치면 두 개)의 View 만 사용했지만 fragment 는 보통 여러 개의 View 를 포함합니다. 거의 activity 와 비슷합니다. fragment 를 사용하는 activity 의 경우 activity 는 껍데기이고 내용은 fragment 에 담아두죠.
activity_main.xml 에는 배치되어 있던 뷰를 없애는 대신 Fragment 를 배치했습니다. fragment 의 name 속성에는 fragment 를 지정합니다. fragment_my.xml (레이아웃)가 아니라 MyFragment (클래스)를 지정해야 합니다. 지금 상태에서는 빨간 줄이 뜨는 게 정상입니다. name 값은 사실 다음 내용을 작성한 뒤에 하는 것이 더 적절할 수 있습니다.
fragment 의 id 값은 반드시 작성해 주세요. 안 적으면 에러 나더라구여 ㅠㅠ
fregment 를 사용하려면 activity 의 ViewGroup 에 fragment 가 추가해야 하는데, xml 에서 추가하는 방법과 프로그래밍으로 추가하는 방법이 있습니다. 여기서는 xml 에서 추가하는 방법을 보여줍니다. <fragment> 태그를 추가하면 자동으로 fragment 가 ViewGroup 에 추가되어 fragment 를 View 처럼 사용할 수 있습니다. 다만 스크린샷과 같이 미리보기는 안 나옵니다.
MyFragment 가 Fragment 를 상속받도록 합니다. 그리고 onCreateView 를 override 합니다. Ctrl + O 단축키를 눌러서 onCreateView 메소드를 추가하면 return 부분을 제외하고 자동으로 생성됩니다. 이것이 바로 intellij (젯브레인 만세) return 부분만 수정해주시면 됩니다. inflate 로 넘겨주는 첫 번째 인자는 inflate 시킬 layout 을 의미합니다. 두 번째 인자는 fragment 를 포함하는, 상위 개념인 ViewGroup 을 의미합니다. 세 번째 인자는 두 번째 인자로 넘겨준 "ViewGroup 에 이 fragment 를 추가할 것인가?"에 대한 내용인데, 우리는 activity_main.xml 에서 frament 라는 태그를 넣어줬기 때문에 이미 ViewGroup 에 포함되어 있습니다. 여기까지 작성하면 아까 fragment_my 에서 떴던 빨간 줄이 사라집니다.
실행 결과입니다.
- ViewPager2
ViewPager2 는 TabLayout 과 같이 사용합니다. fragment 를 사용하는 대표적인 경우입니다. 이것을 이용해 navigation bar 를 구현할 수 있습니다. ViewPager2 위치에 fragment 가 들어갑니다. TabLayout 에 여러 개의 탭들이 있고 탭을 누르면 보이는 fragment 가 바뀌는 구조입니다.
ViewPager2 를 사용할 activity 에 ViewPager2 와 TabLayout 을 추가해 줍니다.
MainActivity.kt 에는 위처럼 코드를 작성합니다. fragment 하나를 더 만들어 MyFragment2.kt 와 fragment_my2.xml 파일이 추가되었고, xml 파일에서는 Hello World 대신 "My Fragment", "My Fragment2" 를 출력하도록 변경했습니다.
ViewPager2 에는 adapter 를 연결해야 합니다. 코드 23라인부터가 아답터 코드인데 어렵지 않습니다. getItemCount 는 RecyclerView 때와 마찬가지로 출력 되어야할 전체 개수입니다. 코드에서는 3이라는 고정값을 넣었으므로 탭의 개수는 3개가 됩니다. createFragment 에서 각 탭에 매칭될 fragment 를 지정해줍니다. fragment 를 생성하여 반환해줍니다. 그리고 코드 18라인에서 adapter 를 생성하고, 코드 20라인에서 adapter 를 초기화 해 주면 ViewPager2 가 동작하게 됩니다. ViewPager2 는 스와이프와 애니메이션 기능을 내장하고 있어 좌우로 드래그하여 화면을 넘길 수 있습니다.
코드 17라인과 코드 23~25 라인을 추가하여 TabLayout 과 ViewPager2 를 연결할 수 있습니다.
- 중요과제 2
앱센터 로고는 카톡방에 올리겠습니다.
영상에 나온대로 만들면 됩니다. 다음 기능이 포함되면 과제를 통과하실 수 있습니다. 영상으로 확인할 수 있는 기능이 전부입니다.
- 스플래시 화면 (0.5초)
- ViewPager 를 통한 화면 전환
- 키패드탭 : 숫자패드 배치
- 연락처탭 : RecyclerView
과제 통과에 영향은 주지 않지만 고려할 만한 내용은 아래와 같습니다.
- 스플래시 화면은 원래 앱 로딩 시간에 대신 보여줄 화면을 의미하는데요. 요즘엔 디자인에 무조건 들어가는 느낌이 있는데 사실 필수는 아니에요. 과제 앱같은 경우 로딩 시간이 매우 짧기 때문에 스플래시 화면을 강제로 0.5초 넣었습니다.
- 스플래시 화면이 메인 화면으로 전환되면 스플래시 화면은 종료되어야 합니다. - ViewPager 를 통한 화면 전환
- 스와이프를 통한 화면 전환을 강제로 막을 수 있습니다.
- 탭 색깔과 선택되어 있는 탭의 색깔을 바꿀 수 있습니다. - 키패드탭 : 입력을 확인하는 View 를 TextView 로도 구현할 수 있지만 EditText 의 키보드가 못 올라오게 막을 수도 있습니다.
- 숫자가 회색이 아닌 검정색인데 각 TextView 마다 작성하지 않고 themes.xml 을 수정하면 한 번에 모든 색을 바꿀 수 있습니다. - 연락처탭 : RecyclerView
ViewPager2 는 가로 스와이프, RecyclerView 는 세로 스크롤이 내장되어 있습니다. 이 두 가지를 같이 사용하면 충돌이 일어나 RecyclerView 의 스크롤이 동작하지 않습니다. 물론 동작하게 만들 수 있지만 이 과제에선 과한 요구사항 같습니다. - 툴바를 사용하지 않았습니다.
- themes.xml 를 수정하면 status bar 색깔을 바꿀 수 있습니다.
중요과제1은 6월 16일 수요일, 중요과제2는 6월 23일 수요일까지 하시면 됩니다. 중요과제2가 마지막 과제이고 이후 스터디에서는 과제가 없습니다.
안드로이드 기능에 대한 스터디는 이번이 마지막입니다. 과제가 아닌 프로젝트에서는 코드의 양이 훨씬 많아집니다. 이 코드들을 효율적으로 다루기 위해선 설계가 필요한데요. 다음 스터디에서는 MVP, MVVM 패턴과 패키지 구조에 대해 다룹니다.
더 공부할 만한 내용은 다음과 같습니다.
AAC(Android Architecture Components) : 이 라이브러리에서 MVVM 패턴을 지원합니다.
Jetpack : 여러 라이브러리를 지원하는데 여기서도 MVVM 패턴을 지원합니다.
머티리얼 디자인 : 머티리얼 디자인이 정답은 아니지만 머티리얼 디자인을 적용하면 사용자가 익숙하게 사용할 수 있습니다.
서비스, 컨텐트 프로바이더 : 안드로이드의 컴포넌트는 액티비티, 브로드캐스트 리시버, 컨텐트 프로바이더, 서비스 이 네 가지로 구성되어 있지만 스터디에서 다룬 것은 액티비티 뿐입니다. 물론 액티비티가 양이 가장 많습니다. 서비스는 백그라운드에서 작업을 수행합니다. 컨텐트 프로바이더는 다른 앱과 연동할 수 있습니다.
알림 : 알림 기능 필요하죠... 파이어베이스를 이용하면 푸시 알림까지 구현 가능합니다.
RxJava : 반응형 프로그래밍... RxJava 라고 해서 꼭 자바를 쓰는 건 아니고... 근데 저도 안 써봤어요. 어렵던데;;
JUnit : 테스트 라이브러리입니다. 안드로이드에 기본적으로 4.x 버전이 포함되어 있고 지금은 5.x 버전이 나오고 있습니다. 서버개발자라면 무조건 테스트를 해야하고 안드로이드 개발자여도 관심은 가져야...
아래는 우아한형제들(배달의 민족) 안드로이드 개발자 채용 공고입니다. 위에 있는 거 다 할 줄 알면 배민 취업 가능할지도...? Glide 는 이미지 관련 라이브러리입니다.
'안드로이드' 카테고리의 다른 글
[안드로이드] 보일러 플레이트 (상용구 코드) (0) | 2021.12.31 |
---|---|
[안드로이드] 화면 전환 - Navigation (0) | 2021.12.25 |
[안드로이드 #5] menu, drawer, toolbar (0) | 2021.05.23 |
[안드로이드 #4] Retrofit2 (0) | 2021.05.18 |
[안드로이드 #3] RecyclerView (상) (0) | 2021.03.31 |