플랫폼 api 와 제트팩 라이브러리
java, android 로 시작하는 패키지들을 합쳐서 플랫폼 api 라고 칭한다. 안드로이드 핵심 라이브러리이지만, api 레벨 호환성 문제와 다른 추가 기능 개발에 제한적이라는 문제가 존재한다.
이를 보완하는 추가 라이브러리가 제트팩 라이브러리(androidx)
호환성이 보장되기 때문에, 같은 기능이더라도 제트팩에 존재한다면 제트팩 라이브러리를 활용하는게 좋다.
appcompat 라이브러리
컴포넌트 중 하나인 액티비티 관련 제트팩 라이브러리이다. 플랫폼 api 에도 존재하나, api 레벨 호환성이 보장된 액티비티이기 때문에, 기본적으로 appcompat 의 액티비티 사용을 권장한다.
업(up) 버튼(a.k.a 상단 뒤로가기 버튼)
액션바의 뒤로가기 버튼은 소스 파일에서 직접 추가할 수도 있고, 매니페스트에서 부모 액티비티를 설정하는것만으로도 추가할 수도 있다.
<activity
android:parentActivityName=“.MainActivity”></activity>
업 버튼에 추가 기능을 정의하고 싶다면, 액티비티 파일 내에서
onSupportNaviagetUp() 을 오버라이딩하면 된다.
소스코드에서 액션바를 활성화하려면 supportActionBar?.setDisplayHomeAsUpEnabled(true) 설정을 해준다.
프래그먼트
화면이 넓거나, 한 화면 안에서 너무 많은 뷰를 다루어야 하는 경우, 화면을 분할하기 위해 프래그먼트를 사용한다. 프래그먼트는 액티비티와 같은 컴포넌트는 아니고 뷰 클래스를 상속하며, 액티비티와 동일한 역할을 수행할 수 있다.
* 프래그먼트의 생명주기는 액티비티의 생명주기와 더불어 추가적인 생명주기가 존재한다. 이 때, onViewCreate 에서는 레이아웃 inflation 까지만 진행하고, onViewCreated 에서 뷰 초기화 작업을 진행해준다. ex) 리스너, 어댑터 설정, 옵저버 설정 등
transaction.addToBackStack
transaction.addToBackStack(name: String) 을 사용하면 트랜잭션 작업이 commit 될 때마다 작업들을 스택으로 저장해두고, pop ()으로 불러올 수 있도록 해준다. 이 기능을 활성화하면 프래그먼트가 전환될 때 프래그먼트 객체가 파괴되지 않고, 프래그먼트 안의 뷰까지만 파괴된다. 이후 다시 해당 프래그먼트로 돌아가면 onCreateView() 부터 호출되고, 해당 프래그먼트로 돌아가고자 할 때는 backKey 를 사용하면 된다. name param 은 backStack 에 저장할 때 해당 트랜잭션의 이름을 설정하기 위한 param 이며, nullable 이다.
리사이클러뷰 GridLayoutManager
그리드 레이아웃으로 리사이클러뷰를 구성하고 싶은 경우, layoutManager 객체를
val layoutManager = GridLayoutManager(this, columnCount, orientation(GridLayoutManager.HORIZONTAL, VERTICAL), false) 로 설정 가능하다. 마지막 boolean 값은 출력 시작을 정방향으로 할지 역방향으로 할지 여부이다. false == 정방향
ItemDecoration
onDraw() -> 아이템 배치 이전, canvas 에 그리면 아이템 최하위단에서 출력
onDrawOber() -> 모든 아이템 배치 이후, canvas 에 그리면 아이템 최상위단에서 출력
getItemOffsets() -> 아이템 개별적으로 실행, 아이템 index 는parent.getChildAdapterPosition(view) 로 획득 가능