[Android/Compose] TextUnit 과 Dp
·
Android/Compose
개요컴포즈의 Text 컴포넌트에서 폰트 크기는 아래와 같이 설정할 수 있습니다. Text( text = "Android", fontSize = 16.sp) 만약 폰트 크기의 단위를 Dp 로 설정한다면 어떻게 될까요?XML 에서라면 정상적으로 사용이 가능했지만 컴포즈에서는 컴파일 오류가 발생하게 됩니다..sp 의 경우, TextUnit 을 반환하지만 .dp 는 Dp 를 반환하기 때문입니다. @Stableval Int.sp: TextUnit get() = pack(UNIT_TYPE_SP, this.toFloat())@Stableinline val Int.dp: Dp get() = Dp(this.toFloat()) 물론 앱 접근성을 확장하기 위해 시스템 폰트 설정에 따라 동적으로 크기가 변하는 Sp..
[안드로이드 / Kotlin] FusedLocationProviderClient
·
Android
안드로이드에서는 기본적으로 LocationManager 를 이용하여 위치 정보를 가져올 수 있습니다. LocationManager 는 Context.getSystemService() 메소드를 이용하여 구현할 수 있고, GPS, Wi-Fi, Network 를 통해 직접 요청할 수 있습니다. 하지만 개발자가 상황에 맞게 직접 구현해야 하므로 비교적 구현이 복잡할 수 있습니다. Google Play 서비스에서 제공하는 Location API 를 이용하면, 위의 방법들을 알아서 융합적으로 고려하여 요청하기 때문에 기기의 배터리 사용을 최적화할 수 있습니다. FusedLocationProviderClient 는 해당 API 에서 사용되는 객체이며, 지금부터 이에 대한 간단한 사용법에 대해 알아보겠습니다. 의존성 ..
[안드로이드 / Kotlin] Coroutine Flow debounce를 이용한 검색 구현
·
Android
안드로이드 앱을 개발하다보면 EditText를 이용한 검색 기능을 많이 구현합니다. 하지만 EditText에서 입력값의 변화를 감지할 때마다 API 호출을 하게되면 많은 비용을 소비하게 됩니다. 예를 들어 빠르게 값을 입력하고 지웠다면, 불필요한 입력에도 API를 호출하여 매우 비효율적이라 할 수 있습니다. 그러므로 일정 시간 간격을 주고, 유저의 입력이 끝났다고 판단될 때 API 호출하여 좀 더 효율적으로 구현해야 합니다. 이때 사용하는 것이 debounce 기법입니다. debounce란? debounce는 스크롤 또는 값의 입력과 같이 이벤트가 과도하게 많은 API를 호출할 경우 지정한 시간 동안 호출의 제약을 걸어 과부하를 방지하는 기술입니다. 예를 들어 지정한 시간을 1초라고 할 때, 이 1초 동..
[안드로이드 / Kotlin] 둥근 모서리 Bitmap 이미지 만들기
·
Android
안녕하세요! 오늘은 Bitmap을 이용해 둥근 모서리 이미지를 만드는 간단한 코드를 소개 시켜드리고자 합니다. Glide와 같은 유용한 이미지 라이브러리를 이용해서도 구현 가능하지만, 이런 서드파티 라이브러리 없이 사용 해야할 경우 유용할 것 같습니다! 코드는 아래와 같습니다. (+ 추가적으로 파일 경로를 이용해 ImageView에 이미지를 뿌려주는 코드도 같이 담겨 있습니다😉) fun setPhoto(filePath: String) { val file = File(filePath) val srcBitmap = BitmapFactory.decodeFile(file.absolutePath) srcBitmap?.let { bitmap -> val roundedBitmap = getRoundedCornerBi..
[안드로이드 / Kotlin] RecyclerView 최상단 최하단 스크롤감지
·
Android
안드로이드 개발하다보면 RecyclerView의 사용은 거의 반강제?일정도로 자주 사용되고 있습니다. 최근에는 퀄리티 높은 많은 앱들이 생겨나면서 자연스레 UI/UX도 iOS만큼이나 향상되었습니다. 특히 앱내 상태바나 액션바(툴바) 애니메이션을 통해 그 사실을 쉽게 느낄 수 있습니다. 제가 이 말씀을 드리게 된 이유는 향상된 안드로이드의 UI/UX와 RecyclerView 스크롤은 밀접한 관련이 있는 경우가 많기 때문입니다. 그래서 오늘 제가 소개 시켜드릴 내용은 간단하지만 꽤나 유용하게 사용하실 수 있다고 생각합니다😊 내용은 RecyclerView 의 최상단 및 최하단의 스크롤 감지 방법입니다. 간단하게 정리하면 아래와 같습니다. RecyclerView.OnScrollListener() 사용하기 상황에..
[안드로이드 / Kotlin] Snackbar에 커스텀 폰트 적용하기
·
Android
안녕하세요! 오늘은 안드로이드에서 메시지를 띄워주는 방법 중 하나인 Snackbar에 커스텀 폰트를 적용하는 방법에 대해 간단하게 설명 해드리고자 합니다😊 일반적으로 Snackbar를 이용할 때, 아래와 같은 코드를 사용합니다. Snackbar.make(view, message, duration).show() 하지만 앱을 개발하다보면 자체 커스텀 폰트를 적용하는 경우가 많은데, 위 코드를 이용해 스낵바를 사용하게되면 시스템 폰트를 따라가도록 되어있습니다. 그래서 스낵바에 커스텀 폰트를 적용할 방법이 없을까하는 생각에 구글을 찾아본 결과,,, StackOverFlow에서 좋은 코드를 찾았습니다! 예전에 찾은 코드들은 Snackbar style 내 TextView를 찾아 해당 뷰의 typeface를 바꾸는 ..
[안드로이드] ConstraintLayout 뷰 밀림 문제
·
Android
안녕하세요! 오늘은 안드로이드 뷰 구성에 사용되는 ConstraintLayout을 사용하면서 제가 헤맸던 부분을 소개시켜 드리고자 합니다🤗 ConstraintLayout에서 chain 이라는 제약이 있습니다. 이 제약을 이용하면 여러 개의 뷰를 그룹화하여 그룹 채로 컨트롤하는데 도움을 주기 때문에 사용하는 경우가 종종 나타나곤 합니다. 제가 개발했던 상황 역시 두개의 TextView의 그룹화가 필요했기 때문에, chain 제약의 packed을 속성을 이용해 그룹화 시켜주었습니다. 추가적으로 첫번째 TextView는 너비가 유동적으로 변할 수 있어야 했고, 두번째 TextView는 첫번째 TextView의 너비와 상관없이 chain을 유지한채 뷰가 밀리지 않아야하는 조건이 있었습니다. 당시 처음에 제가 작..
[안드로이드 / Kotlin] ViewPager2 setCurrentItem duration
·
Android
안녕하세요! 오늘은 제가 안드로이드를 개발하면서 유용한 팁 하나를 소개시켜드리고자 합니다. 안드로이드를 개발하시면서 ViewPager2를 많이들 사용하고 계실거라는 생각이 듭니다. ViewPager2에서 특정한 위치의 페이지로 이동할 때, setCurrentItem(item: Int, smoothSroll: Boolean)을 이용합니다. 이때 두번째 파라미터인 smoothScroll을 true로 하게되면 마치 직접 스크롤하듯이 페이지가 전환됩니다. 그런데 해당 애니메이션의 속도가 생각보다 너무 빠르게 흘러가 속도를 조절하고자 서칭해본 결과.. ViewPager2에서 해당 기능을 따로 제공하지 않고 있었습니다..😢 그래서 오늘 소개시켜드릴 내용이 바로 duration 조절이 가능한 커스텀 setCurren..
[안드로이드 / Kotlin] Moshi
·
Android
오늘은 최근 안드로이드 네트워킹시 자주 이용되고 있는 Moshi에 대해 간략하게 알아보도록 하겠습니다! Moshi 보통 직렬화, 역직렬화 라이브러리로 Gson을 많이들 이용하셨을거라는 생각이 듭니다. 안드로이드 개발 언어의 추세가 자바에서 코틀린으로 넘어가게되면서 Gson외에도 Moshi라는 라이브러리가 최근 많이 이용되고 있습니다. Moshi란, Gson과 마찬가지로 Json과 객체 사이의 직렬화 및 역직렬화를 안전하게 할 수 있도록 돕는 라이브러리 입니다. Gson이라는 라이브러리가 있음에도 최근 Moshi의 사용이 증가하는 이유가 무엇일까요? 이유를 간단히 살펴보면 아래와 같습니다. Kotlin 친화적이다. Gson의 리플랙션외 Code-gen 방식이 변환을 지원한다. 어뎁터를 커스텀하여 사용할 수..
[안드로이드 / Kotlin] Clean Architecture 개념
·
Android
안녕하세요! 최근 바쁜 일이 좀 있어서 엄청 오랜만에 글을 올리는 것 같습니다,,😓 앞으로는 시간이 되는대로 틈틈이 안드로이드 개발에 도움이 되는 것들을 정리해서 올리도록 노력하겠습니다 🙃 오늘 알아볼 내용으로는 안드로이드에서의 '클린 아키텍처(Clean Architecture)'가 되겠습니다! 클린아키텍처란? Clean Architecture 특정 수준 혹은 복잡도를 가진 애플리케이션을 위한 고품질 코드를 작성하기 위해서는 상당한 노력과 경험이 필요합니다. 애플리케이션은 고객의 요구사항을 충족 할 뿐만 아니라 유연하고 테스트 가능하며, 유지 관리가 가능해야합니다. 이런 문제에 대한 해결책을 Bob 삼촌으로도 잘 알려진 Robert C. Martin이 2012년에 제시한 개념입니다. 아래는 안드로이드에서..