Android (20) 썸네일형 리스트형 [안드로이드]커스텀 EditText 만들기 Android에서 사용자 입력을 받기 위한 EditText. 프로젝트 진행 중 기획 상 기본 EditText 기능만으로는 부족한 부분이 있어텍스트를 지우는 버튼이 있는 커스텀 EditText 만들게 되었다. 커스텀 EditText를 사용하는 방법에 대해 정리해 본다. 1. 기능 소개(요구사항)InputEditText는 다음과 같은 기능을 갖는 커스텀 EditTex텍스트가 있을 때만 표시되는 지우기(X) 아이콘포커스 여부에 따른 배경 변경커스텀 폰트 적용 (Pretendard Variable)힌트 색상 및 텍스트 사이즈 설정외부에서 setOnFocusChangeListener, setOnTouchListener 오버라이딩 가능2. 구현 코드public class InputEditText extends Ap.. [안드로이드]FCM 에서 PendingIntent가 재사용되는 문제와 해결 방법 FCM 관련 기능을 개발 중 서버에서 전달받은 RemoteMessage값이 변경되지 않는 문제가 발생하여 소스를 수정을 하게되었다.이 현상은 앱에서 Firebase Cloud Messaging(FCM)을 통해 푸시 알림을 수신하고, 알림을 탭했을 때 특정 데이터를 액티비티로 전달하는 기능을 구현하다 보면, 발생하는 문제이다.1. 문제 상황PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_IMMUTABLE);이렇게 만들었더니, 푸시 알림을 여러 번 받아도 처음 받은 메시지의 데이터만 전달되고, 그 이후 알림은 클릭해도 이전 데이터가 유지되는 현상이 발생하였다.❓ 왜.. [Jetpack Compose] 기존 UI방식과 다른 점? 기존 명령어 방식에 익숙한 개발자로서 선언형 UI에 개념을 이해하는데 어려움이 있어 정리하는 차원에서 글을 작성해본다.1. 선언형 UI vs 명령형 UI의 차이Jetpack Compose의 가장 큰 특징은 선언형(Declarative) UI 방식이라는 점이다. 기존 Android View 시스템은 명령형(Imperative) 방식이며, 이 두 가지는 단순히 코드 스타일만 다른 것이 아니라, UI 구성과 상태 관리 개념이 다르다. 2. 선언형 UI의 핵심은 “현재 상태에 따라 UI를 그린다.” Compose에서는 UI는 상태(state)에 기반해 선언하고, 상태가 바뀌면, 해당 UI는 자동으로 다시 그려진다 (recomposition).기존 안드로이드처럼 View를 직접 찾아서 조작하지 않고, UI는 항상.. [안드로이드] 딥링크에 대하여.. Manifest 설정부터 푸시 연동까지 한 번에 이해하기 1. 딥링크란?딥링크(Deep Link)는 외부에서 앱의 특정 화면으로 직접 진입할 수 있는 링크이다예를 들어, 웹에서 myapp://login을 클릭하면 앱이 실행되고 로그인 화면이 바로 열리는 방식을 말한다. 2. 기본 딥링크 설정 방법(AndroidManifest.xml 설정) 3. 테스트 방법여러가지 방법이 있겠지만, 내가 테스트한 방법은 "myapp://example" 이라는 문구를 QR코드로 만들어 카메라로 촬영하는 방법이다. @Overrideprotected void onCreate(Bundle savedInstanceState) { .. [안드로이드] FCM 토큰은 변경, 그리고 어떻게 대응할까? FCM 토큰은 일정 조건에서 변경되며, 변경 시 적절한 대응을 하지 않으면 푸시가 유실되거나, 서버와의 싱크가 깨질 수 있다. FCM 토큰은 언제 바뀌고, 어떻게 대응하면 되는지 실무 기준으로 정리해본다. 1. FCM 토큰이 변경되는 주요 케이스 상황설명앱 데이터 삭제앱 설정 > 저장 공간 > 데이터 삭제 시 토큰도 초기화됨앱 재설치앱을 삭제했다가 재설치하면 새로운 토큰이 발급됨사용자 백업/복원기기에 따라 백업 복원 후 토큰이 변경될 수 있음Firebase 인스턴스 ID 삭제deleteInstanceId() 호출 시 강제 초기화됨Google 계정 제거시스템 설정에서 계정을 제거하거나, Google Play 서비스 설정이 초기화될 경우간헐적인 보안 갱신구글 서버 정책에 따라 비정기적으로 토큰이 갱신될 수 .. [안드로이드] EditText 외부 선택 시 키보드 제거_kotlin (Button 터치 예외처리추가) 안드로이드 EditText외에 다른 영역을 선택 했을 때 키보드를 제거 하는 코드이다. TouchedView ! is Button 조건을 사용하지 않고 dispatchTouch event만 사용했을 경우 키보드가 뜬 상태로 버튼 선택이 되지 않는 SideEffet가 발생하여 선택한 영역이 버튼일 경우에는 제외하는 조건을 추가 하였다. override fun dispatchTouchEvent(ev: MotionEvent): Boolean { val focusView = currentFocus if (focusView != null) { val rect = Rect() focusView.getGlobalVisibleRect(rect) .. [안드로이드] kotlin uuid 생성코드 private fun deviceId(): String? { val deviceIdKey = "makeDeviceID" val sharedPreferences = getSharedPreferences("AppDate", 0) var deviceId = sharedPreferences.getString(deviceIdKey, null) if (deviceId == null) { deviceId = retrieveDeviceId() if (deviceId == null) { deviceId = retrieveAndroidIdOrGenerateUUID() } .. [안드로이드] 에뮬레이터 네트워킹(localhost 테스트) 로컬서버와 테스트 시 일반적으로 localhost 또는 127.0.0.1로 테스트를 진행하지만, 안드로이드 에뮬레이터와 테스트 시에는 10.0.2.2 로 설정을 해야한다. 안드로이드 에뮬레이터 네트워킹 설정참고 https://developer.android.com/studio/run/emulator-networking?hl=ko 이전 1 2 3 다음 목록 더보기