본문 바로가기

분류 전체보기134

11-5 뷰 페이저2 - 스와이프로 넘기는 화면 구성 뷰 페이저(ViewPager)는 스와이프(손가락으로 화면을 탭하여 오른쪽이나 왼쪽으로 미는) 이벤트로 화면을 전환할 때 사용한다. ex. 인스타그램 뷰 페이저는 플랫폼 API에서 제공하지 않으므로 androidx 라이브러리를 이용해 개발해야 한다. 2019년에 뷰 페이저 대신 뷰페이저2가 나왔다. 더보기 (개정판 삭제 내용) 뷰 페이저2를 이용하려면 그래들 파일의 dependencies 항목에 다음과 같이 설정해야 한다. // 뷰 페이저2 선언 implementation 'androidx.viewpager2:viewpager2:1.0.0' // 뷰 페이저2 라이브러리 추가 뷰 페이저2는 화면을 항목으로 본다. 각 항목이 순서대로 나열되어 있는데 단지 한 화면에 항목 하나가 나온다는 개념이다. 따라서 리사.. 2023. 6. 29.
11-4 리사이클러 뷰 - 목록 화면 구성 리사이클러 뷰 기초 사용법 리사이클러 뷰는 목록 화면을 만들 때 사용한다. RecyclerView 클래스만으로는 화면에 아무것도 출력되지 않는다. 다음과 같은 구성 요소가 필요하다. ViewHolder(필수): 항목에 필요한 뷰 객체를 가진다. Adapter(필수): 항목을 구성한다. 뷰 홀더에 있는 뷰 객체에 적절한 데이터를 대입해 항목을 완성한다. LayoutManager(필수): 항목을 배치한다. 어댑터가 만든 항목들을 어떻게 배치할지 결정하여 리사이클러 뷰에 출력한다. ItemDecoration(옵션): 항목을 꾸민다. 예를 들어 카카오톡 채팅방 목록 화면을 리사이클러 뷰로 만든다 할 때, 뷰 홀더는 각 뷰가 들어갈 자리? 틀? 느낌이고, 어댑터는 각각의 뷰에 이미지뷰, 텍스트 뷰 등등 어떤거 들.. 2023. 6. 29.
11-3 프래그먼트 - 액티비티처럼 동작하는 뷰 androidx에서 제공하는 라이브러리 가운데 프래그먼트와 뷰 페이저2는 중요도와 사용 빈도가 높다. 프래그먼트는 플랫폼 API에서도 android.app.Fragment로 제공하지만 대부분 androidx.fragment 라이브러리를 이용해 구현한다. 따라서 이 책에는 androidx 라이브러리로 프래그먼트를 사용하는 방법을 설명한다. 참고로 11-5 절에서 설명할 뷰 페이저2는 플랫폼 API에서 제공하지 않는 라이브러리이다. 프래그먼트 소개 프래그먼트는 텍스트 뷰나 버튼처럼 액티비티 화면을 구성하는 뷰인데, 그 자체만으로는 화면에 아무것도 출력되지 않는다. 프래그먼트가 다른 뷰와 다른 점은 액티비티처럼 동작한다는 것이다. 즉, 액티비티에 작성할 수 있는 모든 코드는 프래그먼트에도 사용할 수 있다. 프.. 2023. 6. 29.
11-2 appcompat 라이브러리 - API 호환성 해결 androidx 라이브러리에서 가장 많이 사용하는 appcompat 라이브러리는 안드로이드 앱의 화면을 구성하는 액티비티를 만들며 API 레벨의 호환성 문제를 해결해준다. appcompat 라이브러리를 사용하려면 그래들 파일의 dependencies 항목(의존성 설정)에 다음처럼 선언해야 한다. 그런데 이 선언은 안드로이드 스튜디오에서 모듈을 만들 때 자동으로 추가된다. // appcompat 라이브러리 선언 implementation 'androidx.appcompat:appcompat:1.3.1' appcompat 라이브러리를 이용해서 액티비티를 만들 때는 플랫폼 API의 Activity가 아니라 다음처럼 appcompat의 AppCompatActivity 클래스를 상속받아 작성한다. // appco.. 2023. 6. 29.
11-1 제트팩과 androidx 소개 API가 제공하는 뷰만으로는 버전호환성 때문에 한계가 있다. 구글에서는 사용자의 요구에 따라 플랫폼 API 외에 라이브러리를 따로 제공해 복잡한 화면을 편리하게 구성하도록 돕는다. 11, 12장에서는 이러한 구글 라이브러리로 화면을 구성하는 법을 공부할 것이다. 구글에서는 안드로이드 앱을 개발하는 데 필요한 다양한 라이브러리 모음을 제트팩(Jetpack)이라는 이름으로 제공한다. 제트팩은 안드로이드 플랫폼이 기본으로 제공하는 플랫폼 API 외에 따로 추가된 라이브러리이다. 플랫폼 API플랫폼 API는 ART(Android runtime)에서 제공하는 안드로이드 앱의 핵심 라이브러리이다. ART는 대부분 android나 java로 시작하는 패키지명을 사용한다. 우리가 지금껏 이 책에서 살펴본 클래스는 대부.. 2023. 6. 27.
10-5 알림 띄우기 알림 채널 상태 바는 화면 상단의 한 줄을 의미하며 이곳에 배터리, 네트워크, 시간 등 시스템의 상태 정보가 출력된다. 이 상태 바에 앱의 정보를 출력하는 것을 알림(notification)이라 한다. 원래 상태 바는 시스템에서 관리하는 곳이며 앱이 직접 제어할 수 없다. 그런데 앱에서 시스템에 의뢰하면 시스템에서 관리하는 상태 바에 앱의 알림을 출력할 수 있다. 따라서 앱의 화면을 구성하거나 사용자 이벤트를 처리하는 프로그래밍과는 구조가 다르며 알림을 위해 제공하는 API를 이용해야 한다. API Level 33 버전부터는 앱에서 알림을 띄우기 위해 사용자에게 퍼미션(허가)를 요청해야 한다. 알림은 NotificationManager의 notify() 함수로 발생한다. notify() 함수에는 Noti.. 2023. 6. 27.
10-4 소리와 진동 알림 소리알림 사용자에게 짧은 소리로 특정한 상황을 알리는 것을 알림음이라고 한다. 알림음은 카카오톡처럼 자체 녹음한 음원을 쓸 수도 있지만 안드로이드 시스템에 등록된 소리를 이용할 수도 있다. 먼저 시스템에 등록된 소리를 이용하는 방법을 살펴보자. 안드로이드 시스템은 알림(NOTIFICATION), 알람(ALARM), 벨소리(RINGTONE) 등의 소리를 제공하며 이 소리는 RingtoneManager로 얻을 수 있다. // 소리 얻기 val notification: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) // 함수로 소리의 식별값 얻음 val ringtone = RingtoneManager.getRingtone(appl.. 2023. 6. 25.
10-3 다양한 다이얼로그 다이얼로그(dialog)란 사용자와 상호 작용하는 대화상자이다. 여기서는 가장 많이 사용하는 토스트, 날짜 또는 시간 입력, 알림 창 등을 알아보고 개발자가 직접 구성하는 커스텀 다이얼로그도 살펴보겠다. 토스트 메시지 띄우기 토스트(Toast)는 화면 아래쪽에 잠깐 보였다가 사라지는 문자열을 의미하며 사용자에게 간단한 메시지로 특정한 상황을 알릴 때 사용한다. 토스트를 사용하는 대표적 예로 사용자가 폰의 뒤로가기 버튼을 눌러 앱이 종료될 때 "종료하려면 한 번 더 누르세요."를 띄울 수 있다. 이 밖에 간단한 예외 메시지를 출력할 때도 토스트를 많이 사용한다. 토스트는 Toast의 makeText() 함수로 만든다. open static fun makeText(context: Context!, text:.. 2023. 6. 24.
10-2 퍼미션 설정하기 퍼미션(permission)이란 앱의 특정 기능에 부여하는 접근 권한을 말한다. 내가 개발하는 앱이 다른 앱이나 안드로이드 시스템에서 보호하는 특정 기능을 이용할 때 퍼미션 사용을 설정해야 한다. 마찬가지로 내가 만든 기능을 다른 앱에서 사용할 수 없도록 보호하고 권한을 얻은 앱에서만 허용하고 싶을 때 퍼미션을 설정한다. 퍼미션 설정과 사용 설정 퍼미션을 이해하고자 두 앱을 연동하는 상황을 가정해보자. A 앱과 B 앱이 있고 A 앱의 컴포넌트를 B앱에서 사용하는 상황을 예로 들겠다. B 앱에서 A 앱의 컴포넌트와 연동하는 코드만 잘 구현했다면 A앱의 컴포넌트를 B앱에서 얼마든지 사용할 수 있다. 그런데 만약 A앱의 컴포넌트에 퍼미션을 설정하면 B앱에서 연동할 때 문제가 발생한다.(B가 A에 접근할 때 문.. 2023. 6. 24.
10-1 API 레벨 호환성 고려하기 06~10장까지 앱의 기본 기능을 구현하는 방법을 공부하고 있다. 10장에서는 사용자 알림과 API 레벨 호환성, 퍼미션을 살펴볼 것이다. 오늘도 열심히 해봅시다~ 02장에서 build.gradle 파일을 설명하면서 SDK 버전을 설정하는 targetSdk와 minSdk에 관해 살펴봤다. 두 항목에 설정하는 값은 API 레벨을 의미하며 앱 개발에 큰 영향을 주는 중요한 정보이다. // API 레벨 설정 minSdk 21 targetSdk 31 만약 위와 같이 설정했다면 targetSdk에 설정한 31 버전의 API로 앱을 개발한다는 의미이다. 그런데 minSdk를 21로 지정했으므로 이 앱은 21버전(안드로이드 5.0 롤리팝) 기기부터 설치할 수 있다. 결국 이 앱은 31버전의 API로 개발하지만 21 .. 2023. 6. 24.