안드로이드

    [Android] 시스템 설정 변경 처리하기

    안드로이드 애플리케이션 개발 시 다양한 상황에서 기기 설정 변경이 발생할 수 있다. 이러한 상황에 대응하기 위해 안드로이드에서는 onConfigurationChanged 콜백 메서드를 제공한다. onConfigurationChanged란?onConfigurationChanged는 기기의 설정이 변경될 때 호출되는 메서드다. 대표적인 설정 변경 예로는 화면 회전, 화면 크기 변경, 키보드 타입 변경, 언어 설정 변경 등이 있다. 이러한 변경 사항이 발생할 때, 시스템은 해당 액티비티의 onConfigurationChanged 메서드를 호출한다.onConfigurationChanged의 사용법기본적으로, 설정 변경이 발생하면 안드로이드 시스템은 현재 액티비티를 종료하고 새로운 설정을 반영하여 재시작한다. 하..

    [Android] Notification 커스텀하기

    기본적으로 여러 Android 버전에서 알림이 잘 보이도록 하려면 표준으로 제공하는 Notification 템플릿을 사용하는게 가장 좋다. 하지만 요구사항에 의해 기본 템플릿 말고 직접 커스텀한 레이아웃으로 Notification을 구현할 수 있다. 중요한 점은 직접 커스텀한 레이아웃을 적용하기 위해 Notification style 속성에 NotificationCompat.DecoratedCustomViewStyle을 적용해주어야 한다. 이제 순서대로 커스텀 Notification을 적용하는 방법을 알아보자. NotificationCompat.Builder로 기본 Notification을 생성한다. 생성한 Notification 객체의 setStyle()을 호출하여 NotificationCompat.D..

    [Kotlin] runCatching

    runCatching은 코틀린 1.3 버전부터 지원된 캡슐화 블록으로 블록의 실행 결과가 Result의 형태로 리턴된다. 또한 실행 결과에 따른 프로퍼티, 함수들을 사용하여 유연한 이벤트 스트림으로 처리하여 가독성 있는 코드를 구현하는데 큰 도움이 된다. runCatching 예시 val name: Result = runCatching { //String을 리턴하는 작업 "JMJ94" }.onSuccess { it: String -> it }.onFailure { tr: Throwable -> println("$tr") } runCatching은 실행 결과에 따른 프로퍼티를 제공한다. isSuccess runCatching 블록의 실행이 별문제 없이 성공한다면 result는 true고 문제가 발생한 경우..

    [Android] Vector 이미지

    Android 스튜디오에서 SVG(Scalable Vector Graphic) 파일을 Vector 리소스로 사용할 수 있도록 Vector Asset Studio 도구를 제공한다. Vector 이미지를 사용하면서 얻는 이점은 여러 해상도에 대응할 필요 없이 하나의 이미지로 화질 손실 없이 다른 화면 밀도에 맞게 크기를 조정할 수 있기 때문에 리소스로 관리로 인한 앱의 크기를 줄일 수 있다. 하지만 Android 4.4(API 20) 이하의 기기에서는 Vector 리소스 사용을 지원하지 않기 때문에 하위 호환에서 문제가 생길 여지가 있다. Vector를 사용하는 것은 단순한 아이콘 표현에 적합하다. 왜냐하면 다른 리소스 표현 방식보다 처음 이미지를 로드할때 CPU 사이클이 더 소모되기 때문에 최대 200 X..

    [Android] two-way binding 형식 지정하기

    EditText에 데이터 바인딩을 적용하면서 입력되는 문자를 특정 형식으로 바로 변환해주고 싶었다. 해서 Converter라는 Object 클래스를 만들고 아래와 같은 함수를 만들었다. object Converter{ @JvmStatic fun stringWithFormat( value: String? ): String { return value?.moneyFormat() ?: "" } } 위 함수를 EditText의 속성에 databinding으로 적용해 보았다. 실행 결과는 에러이고 그 이유는 아래와 같다. The expression 'yourpackage.util.Converter.stringWithFormat(vmAmountGetValue)' cannot be inverted, so it cann..

    [Android] Android Architecture Components(AAC)

    구글에서 권장하는 아키텍처의 원칙은 '관심사 분리'와 '데이터 모델에서 UI 도출'이다. Activity나 Fragment와 같은 UI 기반의 클래스는 UI 및 운영체제 상호작용을 처리하는 로직만 포함되어야 한다. 위와 같은 클래스들은 최대한 가벼운 상태로 유지하여 수명 주기와 관련된 문제들을 피하고 테스트가 쉽도록 고려되어야 한다. 또한 OS가 언제든지 사용자에 의해 메모리 부족과 같은 시스템적인 조건으로 UI클래스들을 제거할 수 있기 때문에 로직의 성격에 따라 분리하여 UI클래스에 대한 의존성을 최소화하는 것이 좋다. 또한 UI는 데이터를 처리하는 모델에 의해 도출되어야 한다. 모델은 네트워크에 문제가 있거나 OS가 리소스를 확보하기 위해 앱을 제거해도 사용자의 데이터 또는 앱의 동작은 문제없이 지속..