[안드로이드 클라이언트] CH2 안드로이드 개발을 준비하자

0
post-thumbnail

[안드로이드 클라이언트] CH2 안드로이드 개발을 준비하자

이 포스팅은 <SNS 앱을 만들면서 배우는 안드로이드 클라이언트 개발>, 장성환, 비제이퍼블릭(2022)을 읽고 개인 학습용으로 정리한 글입니다.

2.1 메인 화면 개발 문서

2.2 안드로이드 개발환경 준비

2.2.1 아이콘 교체

  • 안드로이드 5.0부터 벡터 drawable 지원
    -> 화면 밀도마다 이미지 추가할 필요 X, 하나의 이미지로 모든 기기 지원 O
    -> 아이콘같이 작고 단순한 경우 권장

  • 구글이 제공하는 머티리얼 아이콘
    https://fonts.google.com/icons

  • drwable은 drawable-hdpi, drawable-xxxhdpi와 같이 다양한 사이즈의 이미지가 있을 때 화면 밀도로 어떤 이미지 사용할 지 결정

  • mipmap: drawable과 마찬가지로 이미지를 담을 수 있지만 오직 앱 아이콘을 위한 폴더
    -> 아이콘 표시할 때 화면 해상도가 아닌 실제 화면에 보이는 크기에 맞는 이미지 선택하여 사용

  • 적응형 아이콘: 아이콘의 전경과 배경을 분리하여 전경의 아트워크 손상 없이 배경을 런처에서 원하는 형태로 표현할 수 있도록 하는 기능
    -> 안드로이드 8(API 26)부터 도입됨
    -> 전경과 배경 2장의 이미지 필요

2.2.2 테스트 기기 준비

  • 테스트 기기 안드로이드 10 이상이어야

  • FCM(Firebase Cloud Messaging)을 사용하기 위해서는 Play Store 지원해야

  • 개발 서버를 실행한 후 에뮬레이터 브라우저에서 http://10.0.2.2:5000/v1/hello-world로 접속

  • 기기에서 테스트하는 경우 개발 머신과 기기를 같은 네트워크에 연결 후 사설 IP로 접속
    -> 내 사설 IP는 윈도우 ipconfig로 확인 가능

2.2.3 메인 레이아웃 만들기

  • BottomNavigationView의 다른 속성
    • app:backgroundTint 네비게이션의 색 결정
    • app:itemIconSize 아이콘의 크기 결정
    • app:itemIconTint 아이콘의 색 결정
    • app:itemTextColor 텍스트의 색 설정
    • app:labelVisibilityMode 레이블의 표시 방법 결정
      • auto: 기본 값, 아이템 개수 3개 이하일 때 모든 레이블 표시, 4개 이상일 땐 선택된 아이템만 표시
      • labeled: 모든 아이템의 레이블 표시
      • selected: 선택된 아이템의 레이블만 표시
      • unlabeled: 레이블 표시 X
  • 기능 별로 패키지 나눠서 사용하기

  • MainActivity에 기능을 추가하기 전에 BaseActivity와 BaseFragment를 만들고 모든 액티비티와 프래그먼트가 상속받도록 함
    -> 여러 액티비티, 프래그먼트에서 공통으로 사용하는 코드 효율적으로 관라하기 위함
    -> 두 클래스는 모두 abstract로 선언

2.2.4 뷰 바인딩으로 findViewById 대체하기

  • 뷰 바인딩(View binding): XML 레이아웃 파일과 바인딩된 클래스 파일 생성됨
    -> 이 클래스는 XML에서 ID를 갖는 모든 뷰를 멤버 변수로 갖고 findViewById()까지 해줌
    -> 바인딩 클래스 이름: 레이아웃 XML 파일 이름의 카멜 표기법 + Binding

  • 뷰 바인딩을 사용하면
    -> 잘못된 뷰를 찾아 발생할 수 있는 NullPointerException 예방
    -> 잘못된 타입 캐스팅으로 발생할 수 있는 ClassCastException 예방

  • 바인딩 클래스는 ActivityMainBinding.inflate()메서드에 layoutInflater를 넘겨 인스턴스화
    -> 생성된 인스턴스의 root로 레이아웃 XML의 루트 뷰를 가져올 수 있음
    -> ID가 있는 뷰는 인스턴스 멤버로 접근할 수 있음

MainActivity.kt

class MainActivity : BaseActivity() {

    lateinit var binding: ActivityMainBinding
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ...
    }
}
profile
Be able to be vulnerable, in search of truth

0개의 댓글