이 포스팅은 <SNS 앱을 만들면서 배우는 안드로이드 클라이언트 개발>, 장성환, 비제이퍼블릭(2022)을 읽고 개인 학습용으로 정리한 글입니다.
안드로이드 5.0부터 벡터 drawable 지원
-> 화면 밀도마다 이미지 추가할 필요 X, 하나의 이미지로 모든 기기 지원 O
-> 아이콘같이 작고 단순한 경우 권장
구글이 제공하는 머티리얼 아이콘
https://fonts.google.com/icons
drwable은 drawable-hdpi, drawable-xxxhdpi와 같이 다양한 사이즈의 이미지가 있을 때 화면 밀도로 어떤 이미지 사용할 지 결정
mipmap: drawable과 마찬가지로 이미지를 담을 수 있지만 오직 앱 아이콘을 위한 폴더
-> 아이콘 표시할 때 화면 해상도가 아닌 실제 화면에 보이는 크기에 맞는 이미지 선택하여 사용
적응형 아이콘: 아이콘의 전경과 배경을 분리하여 전경의 아트워크 손상 없이 배경을 런처에서 원하는 형태로 표현할 수 있도록 하는 기능
-> 안드로이드 8(API 26)부터 도입됨
-> 전경과 배경 2장의 이미지 필요
테스트 기기 안드로이드 10 이상이어야
FCM(Firebase Cloud Messaging)을 사용하기 위해서는 Play Store 지원해야
개발 서버를 실행한 후 에뮬레이터 브라우저에서 http://10.0.2.2:5000/v1/hello-world로 접속
뷰 바인딩(View binding): XML 레이아웃 파일과 바인딩된 클래스 파일 생성됨
-> 이 클래스는 XML에서 ID를 갖는 모든 뷰를 멤버 변수로 갖고 findViewById()까지 해줌
-> 바인딩 클래스 이름: 레이아웃 XML 파일 이름의 카멜 표기법 + Binding
뷰 바인딩을 사용하면
-> 잘못된 뷰를 찾아 발생할 수 있는 NullPointerException 예방
-> 잘못된 타입 캐스팅으로 발생할 수 있는 ClassCastException 예방
바인딩 클래스는 ActivityMainBinding.inflate()메서드에 layoutInflater를 넘겨 인스턴스화
-> 생성된 인스턴스의 root로 레이아웃 XML의 루트 뷰를 가져올 수 있음
-> ID가 있는 뷰는 인스턴스 멤버로 접근할 수 있음
class MainActivity : BaseActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
...
}
}