Android
-
[Android] Compose BasicTextField2를 써보자Android📱/삽질 기록... 2024. 9. 25. 23:46
BasicTextField2를 써보자 Compose에서 TextField를 사용할 때 커스텀을 많이하게 되는 거 같다 그래서 일반 TextField 보다는 BasicTextField를 사용해서 dexorationBox의 인자로 텍스트 필드의 색상이나 기본 UI를 수정해야하는 일이 많다. 그럴 때 쓰면 좋은 방식으로 BasicTextField2를 사용하는 걸 찾았는데아주 편리해서 공유한다 기존 BasicTextField를 사용하면 2가지의 불편한 점이 존재했는데 1. visualTransformation을 이용한 입력값 컨트롤 이 부분은 장단점이 확실하다전화번호를 입력받아야 한다고 쳤을 때 000-0000-0000 이런식으로 입력을 받아야 한다면UX를 위해서 유저가 -을 직접 입력하는 거보다 자동으로 포매..
-
[Android] pendingIntent putExtra 및 주의 사항Android📱 2024. 9. 12. 21:33
요즘 Service를 많이 다루다 보니 notification에서 주로 많이 쓰는 pendingIntent를 많이 사용하고 있다.pendingIntent란 기본적으로 intent가 컴포넌트간의 통신과 데이터 전달을 위한 클래스라고 한다면그에 확장된 버전으로 intent를 지연시켜 발생하는 시키는 방식으로 개발자가 원하는 시점을 정의해 놓고 외부 어플리케이션이나 시스템에 실행 시점을 양도하여 intent를 발생시키는 방식이다. 함정을 파놓고 외부에서 함정을 밟으면 작동하는 원리와 비슷한 느낌이다. 보통 Notification이나 위젯에서 많이 사용을 하게된다고 한다나는 서비스를 이용한 앱 위에 그리기에서 인터렉션을 구현 중이라 사용하게 되었는데문제가 있었다 문제 intent를 사용하듯 putExtra로 ..
-
재미있는 에러 - 다른 앱 위에 그리기 권한 없어지는 에러Android📱/삽질 기록... 2024. 8. 30. 21:31
안드로이드에는 다른 앱 위에 표시라는 재미있는 기능이 있다. 티맵을 예로 들면 해당 화면처럼 서비스를 이용하여 뷰를 띄울 때 그 뷰가 다른 앱 위에서 보이도록해주는 기능이다.유저에게 알림을 줄때도 유용하고, 유저도 다른 앱을 사용하다가 다시 우리 앱으로 편하게 돌아오거나 하는 등의 유저 편의를 위한 기능을 추가할 때 아주 좋은 기능이라고 생각한다. 오류 발견 이번에 해당 기능과 서비스를 이용하여 많은 것을 구현하고 있었다.다시 앱으로 돌아오는 버튼, 취소 알림 등의 기능을 구현해서 APK를 이용해서 실제 운영해보며 테스트를 진행했는데전화를 하면 권한이 꺼져버려서 앱을 돌아올때 권한이 없는데 앱 위에 그리기를 실행하여 앱이 종료하는 현상을 겪었다. 문제 분석 일단 내 테스트기기에서는 그런일이 없어서 문..
-
[Android] 안드로이드 접근성 - 화면 크기 조절, 폰트 크기 조정 설정 제거하기Android📱/삽질 기록... 2024. 5. 11. 12:45
접근성이란... 구글에서는 여러 가지 이유로 핸드폰을 사용하 어려운 유저들을 위해서 기기 제어에 관련된 지원을 하면서 접근성을 많이 신경 쓰고 있다.안드로이드의 접근성으로는 청각 보조 지원, 시각 보조 지원, 모바일 지원 기능이 있다. Talkback, 디스플레이 조정, 음성 명령, LookOut (주변 사물 인식), 스위치로 기기 제어, 점자 디스플레이 , 돋보기 등등 다양한 기능을 지원한다 그중 오늘 다룰 문제는 디스플레이 조정에 관련된 문제였다. 지금 진행하고 있는 프로젝트는 연령층이 꽤나 높은 유저들을 타깃으로 하는 앱이기 때문에 접근성을 고려한 UI를 구현하고 있었다.그래서 UI 자체가 큼직큼직하고, 글씨도 최대한 크게 디자인되어 만들고 있었는데 해당 기능들이 문제가 되었다폰트가 원래 크고 U..
-
[Android] kotlin + gRpc 연결하기Android📱 2024. 4. 23. 21:30
이번에 gRpc를 통한 네트워크 통신을 경험할뻔했는데 요구사항에 맞지 않아 아쉽게 기술 분석만 해보고 끝나서 아까워서 글을 남겨본다 gRpc란? google에서 개발한 오픈소스 RPC 프레임 워크로 다른 주소 공간에서 함수나 프로시저를 호출할 수 있도록 하는 통신 방식이다. 서비스 규격에 맞추어서 인터페이스를 구현한 서버가 있다면 프로세스 간 통신 방식이니 앱에서도 사용할 수 있다. Protocol Buffers를 사용하기 때문에 Json보다 성능이 좋고 REST api와는 다르게 HTTP/2를 이용한 양방향 통신이 가능하다. 그래서 양방향 통신을 위해서 grpc를 고려한 거였는데 이번 프로젝트에서 원하는 양방향 통신을 구현하기가 어려워서 결과적으로 웹소켓을 채택하게 되었다. 아래 설정은 kotlin d..
-
[Android] setFragmentResultListener() 삽질 기록Android📱/삽질 기록... 2024. 4. 20. 20:02
이번에 각 viewModel과 화면의 의존성을 낮추기 위해서 마이그레이션을 하면서 공유 뷰모델의 사용을 최소화하는 작업을 진행하고 있다. 그렇다 보니 fragment에서 결과를 받아오는 과정에서 setFragmentResultListener()를 많이 쓰고 있다. setFragmentResultListener() fragment에서 activityResult를 받아 오듯이 이전화면에 데이터를 던져줄 때 사용하는 함수이다. 리스너 등록 setFragmentResultListener(KEY) { _, bundle -> val data = bundle.getString(DATA_KEY) } 결과를 받아야하는 fragmentd에서 해당 리스너를 등록해 놓고 데이터 전송 setFragmentResult( LIST..
-
[Android] Gson LinkedTreeMap cast 에러 해결Android📱/삽질 기록... 2024. 4. 19. 21:56
이번에 회사에서 신규 피쳐 업무를 진행하며 발생했던 문제 사항을 공유해 보겠습니다. 문제 발생 일단 기존에 View로 되어있던 기능을 Compose로 개선하는 과정이었습니다. 그래서 View와 Compose가 혼합되어 있는 형태의 UI였고, 기존 프로젝트에서는 공유 ViewModel로 activity에서 상태를 관리하고, fragment를 컨트롤하는 로직이 너무 엮여있어서, 그 의존성을 분리하는 과정에서 발생한 문제였습니다. 그러다 보니 fragment -> fragment로 데이터를 넘겨줄 때 activityViewModel을 이용해서 데이터를 가져다 쓰는 구조를 변경하기 위하여, bundle을 통해서 데이터를 넘겨주는 방식으로 변경을 하는 중이었습니다. List 형태의 데이터를 넘겨주어야 했고, Li..