텍스트 하이퍼링크 기능을 Compose의 ClickableText로 구현하셨나요?2024년 9월 4일 출시된 androidx.compose.foundation:foundation-*:1.7.0 버전부터 텍스트 하이퍼링크를 쉽게 구현할 수 있는 LinkAnnotation을 stable 하게 지원합니다. ClickableText은 이제 그만 LinkAnnotation을 알아보기 전에 ClickableText를 잠시 살펴보시면 LinkAnnotation의 장점을 쉽게 알 수 있습니다 하나의 문자열에서 2개 이상의 하이퍼링크가 있으면 사용자의 클릭한 위치 또는 문자열을 알아야 구분할 수 있을 겁니다. 그런 목적에서 ClickableText는 클릭한 문자의 위치를 의미하는 character's offset 값이 ..
MessageStyle 이번 글에서는 Android Notification Style 중 MessageStyle의 이미지 표시하는 방법에 대해서 알아보려고 합니다. MessageStyle은 Android에서 제공하는 알림 스타일 중 채팅처럼 대화형 데이터를 표시하는 목적으로 사용하는 스타일입니다. 최근 회사에서 앱의 알림 스타일을 MessageStyle로 변경하는 작업을 진행했는데요.이미지를 표시하는 부분에서 어려움을 느껴서 이번 글에서 정리해보려고 합니다. 기본 사용법 val person = Person.Builder() --- (1) .setName("자비스") .setIcon(IconCompat.createWithBitmap(bitmap)) ..
최근 'CLFigNotion' Figma plugin을 개발했습니다. 퇴근하고 게임만 하는 삶에서 벗어나 하나의 목표를 가지고 개발하는 경험이 오랜만에 아주 설레고 좋았어요. 이 글을 쓰면서 plugin을 완성했던 늦은 밤, 회사 동료들에게 공유할 생각에 두근거리며 잠에 들었던 날이 떠오르네요. 오해가 없도록 미리 말씀드리면, 제가 이번에 개발한 plugin은 이미 공개되고 많은 찬사를 받은 evan님의 FigNotion plugin의 아이디어를 매우 매우 참고해서 만든 프로젝트입니다. 왜? 개발을 결심한 계기저희 회사는 복잡한 기능 정책을 피그마와 노션 동시에 관리해야 하는 어려움이 있었습니다. 그러다 우연히 evan님의 FigNotion plugin을 알게 되었습니다. 짧은 시간이었지만 기획팀 ..
Enum은 클래스 내에 상수들을 열거해 관리하는 문법으로, 각 상수들은 객체처럼 property와 function을 가질 수 있는 특징이 있습니다. Stable replacement of the enum class values functionEnum 클래스의 열거된 상수들을 연속적으로 접근하고 싶을 때 values 함수를 자주 사용했었는데요. 그러다 최근 Kotlin 1.9.0 버전으로 업그레이드를 하니 values 대신 entries 속성을 사용하길 권장합니다. Enum의 entries는 kotlin 1.8.20에서 Beta 기능으로 처음 등장했고 kotlin 1.9.0 버전에서 정식으로 Stable 되었습니다. entries 속성도 values와 동일하게 열거된 상수들을 연속적으로 접근할 수 있습니다..
Kotlin 1.9.0 버전으로 올리면 Selad Class 자식으로 object 대신 data object를 사용하라고 권장합니다. 기존 object와 차이점은 무엇일까요? 어떤 장점이 있는 걸까요? 밑줄까지 치면서 권장하면서 말이에요 Stable data objects for symmetry with data classes https://kotlinlang.org/docs/whatsnew19.html#support-for-secondary-constructors-with-bodies-in-inline-value- classes What's new in Kotlin 1.9.0 | Kotlin kotlinlang.org data object는 1.9.0 버전부터 정식 출시(Stable)된 데이터 홀더 객..
2023년 7월에 구글은 Google Play 요구사항 정책에 추가되는 개발자 인증 요구사항을 공개했었습니다. 해당 정책은 개발자의 신원 정보를 앱 사용자에게 공개하는 것으로 Google Play를 안전하고 신뢰할 수 있는 플랫폼으로 유지하기 위한 방법으로 도입된 것입니다. 이 정책을 따르지 않는다면 구글 계정과 배포된 앱이 삭제될 수 있다고 합니다. 굉장히 충격적인 소식이 아닐 수 없는데요. 다행인 점은 기존에 가입한 개발자 계정은 다양한 유형과 규모 등 인증하는 데 시간이 더 오래 걸릴 수 있다는 점을 고려해서 기한을 개발자가 직접 선택할 수 있도록 배려해 주었습니다. 2024년 2월 29일까지 마감 기한을 직접 선택하지 않으면 자동으로 마감 기한이 설정되니 꼭 참고하시길 바랍니다. 제공해야 하는 신..
당신은 Android 개발자로서 사진에 보이는 UI를 구현해야 합니다. UI 요구사항 중 왼쪽 아이콘을 클릭 액션이 존재하는데 클릭 영역을 뷰 사이즈보다 크게 잡아야 합니다. 어떻게 구현하면 좋을까요? 비교적 연령대가 높은 유저가 사용하는 서비스를 개발하다 보니 위 요구사항을 구현할 일이 종종 있었습니다. 그때마다 빈 레이아웃을 만들어서 해당 레이아웃에 클릭 리스너를 설정하는 방식을 사용했었는데요. 깨끗한 코드를 작성하겠다는 양심을 버려가며 레거시 코드를 마구마구 만드는 기분이었습니다.. 그러다 최근 위 요구사항에 알맞게 사용할 수 있는 touchDelegate라는 기능을 알게 되어서 소개해보려고 합니다. TouchDelegate TouchDelegate는 뷰가 가지고 있는 경계 너머로까지 클릭 반경을 ..
InAppUpdate 인 앱 업데이트 기능은 앱 내에서 사용자의 업데이트를 유도하는 기능으로 2019년 Google IO에서 처음 소개되었습니다! 안드로이드 5.0(Api level 21) 이상부터 사용 가능하고 Play Core Library 버전도 1.5.0 이상을 사용해야 합니다. 의존성 추가 implement 'com.google.android.play:app-update-ktx:2.1.0' 업데이트 가능 여부 private val appUpdateManager: AppUpdateManager by lazy { AppUpdateManagerFactory.create(context) } val appUpdateInfoTask = appUpdateManager.appUpdateInfo appUpdat..
안녕하세요. 이번 시간에는 Player 움직임을 따라가는 카메라를 만들어보려고 합니다. Cinemachine Package 설치 Package Manager 창을 열어 Cinemachine를 검색해서 설치하세요. Cinemachine을 이용해서 Player를 따라다니는 카메라를 쉽게 만들 수 있어요! Cinemachine Camera 생성 Cinemachine을 설치하면 GameObject에서 Cinemachine Object를 Scean에 추가할 수 있습니다. 그리고 기존 Scean에 존재하던 Main Camera에도 CinemacineBrain 컴포넌트가 추가되는 것을 확인하실 수 있습니다. Follow Prefabs 설정 추가된 Cinemachine Camera의 속성을 보면 GameObject를 ..
안녕하세요. 이번 시간에는 Animation 기능을 통해 지난 시간에 구현한 Player 움직임 기능에 생동감을 불어넣어 봅시다. Animator Animator Component는 추가된 GameObject에 애니메이션 기능을 추가할 때 주로 사용됩니다. 그리고 애니메이션을 편집하기 위해 Animator Controller라는 파일이 생성해서 등록해 줍니다. Animator Controller 생성 및 적용 Project 창에서 원하는 위치에 우클릭 -> create -> Animation Controller를 통해 생성할 수 있습니다. 그리고 이 생성한 파일을 추가한 Animator에 넣어주면 됩니다 Animation Clip 생성 Animation Clip은 애니메이션에서 상태 또는 작은 단위라고 ..