본문 바로가기

Android

(57)
ExpandableListView - 확장 가능한 리스트뷰 안녕하세요? 닉네임간편입니다. 이번 시간에는 확장이 가능한 리스트뷰에 대해서 다루어보겠습니다. 1. 개요 아래 그림처럼 한 아이템을 클릭하면 리스트 형식의 아이템이 보였다가 사라지는 위젯입니다. ListView의 일종이기에 사용 방법은 유사하지만, ExpandableListView는 부모 아이템과 자식 아이템이 있다는 차이가 있습니다. 2. 만드는 법 앞서 말씀드린듯 ListView를 만드는 방식과 유사합니다. 먼저 이 뷰를 구현하기 위해선 다음과 같은 요소들이 필요합니다. 1) ExpandableListView 이 뷰를 표시할 레이아웃에 위젯을 추가해야 합니다. 전 ConstraintLayout 내부에서 사용했으므로 아래와 같이 추가했습니다. 이때 주의해야 할 점이 하나 있습니다. 개발자 문서에 따르면..
Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter intent 0. 에러가 발생했다. 그동안 계속 프로그램이 잘 돌아가다가 갑자기 이런 에러가 발생했다. intent를 전달하면서 발생하는 오류였는데, 정말 상상치도 못한 곳에서 에러가 발생하여 놀랐다. 특히 intent는 정말 자주 사용하고 정말 오류가 없었기에 놀랐다. 그리고 해결하는 데에도 좀 걸리긴 했지만, 다행이 오래 걸리진 않았다. 1. 원인 intent로 전달하는 Parcelable 한 객체 안에 null 값이 있으면 이런 오류가 발생한다. 따라서 모두 null 처리를 해주거나, 혹은 이런 값은 전달하지 않아야 한다. 나도 retrofit으로 데이터를 전달받아서 intent로 넘기려고 했는데, 이때 전달받는 데이터에 없는 변수가 하나 있었고, 따라서 null 변수가 매번 데이터에 포함되었었다. 그리고 이를..
Google Play Console 에서 앱 서명 키 관리할 경우 릴리즈 해시 키 얻는 방법 카카오나 다른 API를 사용할 때 키해시를 필요로 하는 경우가 있습니다. 그런데 이때 Google Play 앱 서명을 사용한다면, 해시키를 추가로 등록해야 합니다. 왜냐하면 Google Play Console에서 얻은 SHA-1 인증서 지문을 Base64 로 인코딩해서 사용해야 하기 때문입니다. 다양한 방법이 있겠지만, 저는 다음과 같은 방법을 사용했습니다. 1. Google Play Console에서 얻은 SHA-1 인증서 지문 설정 -> 앱 무결성 -> 앱 서명 키 인증서 부분에서 SHA-1 인증서 지문을 가져옵니다. 2. git bash 사용 https://git-scm.com/downloads Git - Downloads Downloads macOS Windows Linux/Unix Older r..
ViewPager2 중첩 스크롤 문제 해결 안녕하세요? 닉네임간편입니다. 이번 시간에는 ViewPager2의 중첩 스크롤 문제에 대해서 다루겠습니다. 1. 개요 ViewPager2 안에 스크롤뷰가 있거나, 혹은 ViewPager2가 다른 스크롤뷰 안에 포함되어있고 이들의 방향(orientation)이 같은 경우 스크롤이 제대로 작동하지 않는 문제가 있습니다. 기본적으로 ViewPager2는 중첩된 스크롤뷰를 지원하지 않기 때문입니다. 또한 ViewPager2는 final 클래스이기 때문에 다른 커스텀 클래스를 만들어 상속받을 수도 없습니다. 따라서 중첩된 스크롤뷰 문제가 발생할 경우 자체적으로는 해결이 곤란합니다. 2. 해결 방법 - 1 구글 개발자 문서에 나와있는 샘플을 통해 해결할 수 있습니다. https://github.com/android..
scope(스코프) 함수 안녕하세요? 닉네임간편입니다. 이번 시간에는 스코프 함수에 대해서 알아보겠습니다. 1. 개요 스코프 함수는 코드를 축약해서 표현할 수 있도록 도와주는 함수입니다. 스코프 함수는 객체의 context 내부에서 코드 블록을 실행하는 단일 목적을 갖고 있습니다. 스코프 함수의 종류에는 run, let, apply, also, with이 있습니다. 기본적으로 이 함수들은 유사한 기능을 수행하는데, 그 기능은 바로 객체의 코드 블록을 실행하는 것입니다. 그러나 이 함수들은 객체의 context를 참조하는 방식과 반환값에 있어서 차이가 있습니다. 따라서 이 차이점을 두고 스코프 함수들을 설명하겠습니다. 2. 차이점 1 - 객체 context 참조 방식 참조 방식에는 크게 this와 it이 있습니다. this는 람다..
뱃지 드로어블(BadgeDrawable) - Fab 버튼에 숫자 추가하기 안녕하세요? 닉네임간편입니다. 이번 시간에는 뱃지 드로어블에 Fab 버튼을 추가하는 것에 대해서 다루겠습니다. 1. 개요 상용 서비스 앱에서 알람이 오면 앱 위에 숫자가 나타나는 걸 확인할 수 있습니다. 이처럼 아이콘 위에 중첩되어 숫자 혹은 어떤 정보를 표시할 수 있도록 하는 것이 바로 BadgeDrawable입니다. 2. 사용법 저는 FloatingActionButton에 badgeDrawable을 사용했습니다. 따라서 이 경우의 사용법에 대해서 설명드리겠으며, 코드는 다음과 같습니다. binding.specificFab.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener { @Suppres..
Glide 를 사용해서 이미지 설정하기 안녕하세요? 닉네임간편입니다. 이번 시간에는 Glide(글라이드)에 대해서 다루어보겠습니다. 1. 개요 Glide(글라이드)는 안드로이드에서 이미지를 빠르고 효율적으로 불러올 수 있게 도와주는 라이브러리입니다. 구글은 Glide 라이브러리르 사용하여 앱에서 비트맵을 가져오고, 디코딩하고 표시하는 것을 추천하고 있습니다. 따라서 이 라이브러리를 사용하는 것은 중요하다고 할 수 있습니다. 2. 사용법 - 준비 먼저 build.gradle 파일의 dependencies에 아래와 같은 요소를 추가합니다. def glide_version = "4.12.0" implementation 'com.github.bumptech.glide:glide:$glide_version' annotationProcessor 'com..
예제로 알아보는 ExoPlayer 안녕하세요? 닉네임간편입니다. 이번 시간에는 ExoPlayer에 대해서 알아보겠습니다. 1. 개요 오디오 및 동영상 재생에 사용되는 오픈소스 프로젝트이며, 유튜브와 구글 무비 앱 등에서 사용될 정도로 유용하게 쓰입니다. ExoPlayer는 MediaPlayer에서 지원하지 않는 DASH, SmoothStreaming 및 일반 암호화 같은 기능을 지원하며, 맞춤 설정 및 확장이 용이합니다. 2. 사용법 - 준비 1) 빌드 종속 항목 추가 build.gradle(app) 파일의 dependencies에 아래 코드를 입력합니다. def exoplayer_version = "2.15.0" implementation 'com.google.android.exoplayer:exoplayer:$exoplayer_ver..

728x90
반응형