compose5 [Android][Compose] MaterialCalendarView를 Compose에서 사용하기 기존 xml로 작업한 PWFB 프로젝트를 Compose로 변경하면서 기존에 구현했던 캘린더 UI를 어떻게 구현해야 할까 고민이 많았다. 캘린더는 MaterialCalendarView를 사용하고 있었는데, 다른 캘린더 라이브러리나 직접 구현하는 것보다는 기존 코드를 덜 수정하는 방향으로 진행하고 싶었다. Compose에는 AndroidView라는 컴포저블이 있는데, Compose에서 아직 사용할 수 없는 UI 요소를 사용하는 경우에 쓰인다. AndroidView 컴포저블을 사용해서 MaterialCalendarView를 사용할 수 있었다.AndroidView@Composable@UiComposablefun AndroidView( factory: (Context) -> T, modifier: M.. 작업 일지 2024. 5. 19. [Android][Compose] DataStore 사용해보기 DataStore DataStore는 Jetpack 라이브러리로 Key-Value 또는 형식화된 객체를 프로토콜 버퍼와 함께 저장이 가능한 저장소다. 코틀린의 코루틴과 Flow를 사용하여 데이터를 비동기적이고 일관되며 트랜잭션 방식으로 저장한다. 기존에 SharedPreferences를 사용하고 있다면 DataStore로 마이그레이션 할 것을 구글에서 권장하고 있다. 원본 링크 위 이미지를 보면 PreferencesDataStore와 ProtoDataStore가 있다. DataStore는 두 가지 구현을 제공한다. ◾ Preferences DataStore Key를 사용하여 데이터를 저장하고 접근한다. 미리 정의된 스키마가 필요하지 않으며 유형의 안정성도 제공하지 않는다. ◾ Proto DataStore.. Android/DataStore 2024. 4. 1. [Android][Compose] Bluetooth Connect 하기 [Android][Compose] Bluetooth Scan 하기 안드로이드에서 제공하는 BluetoothLeScanner를 사용해서 Bluetooth 주변기기를 Scan 해보려고 한다. Scan 데이터를 얻으면 아래 이미지와 같이 리스트로 그릴 것이다. (UI는 Compose를 사용) 권한 처리하기 ogyong.tistory.com Bluetooth Scan 하기에 이어서 Connect를 해보려고 한다. GATT(Generic Attribute Profile) Connect를 하고 디바이스의 정보를 구하는 과정에서 GATT가 사용된다. GATT는 ATT를 프로토콜로하여 BLE 기기 간에 데이터를 주고 받기 위한 방식을 정의해 놓은 프로파일이다. ATT는 UUID를 고유 식별자라는 속성을 지니며, 이 속.. Android/Bluetooth 2023. 7. 10. [Android][Compose] Scaffold-topBar가 UI를 가리는 현상 Jetpack Compose 애니메이션 Codelab을 하던 중 AnimatedVisibility()이 보이지 않는 문제를 겪었다. Codelab은 Material2를 기준으로 되어 있었고, 나는 Material3에 맞춰서 진행을 하고 있었는데 AnimatedVisibility가 화면에 표시되지 않았다. Codelab의 코드와 하나씩 비교를 해도 원인을 찾지 못하다가 AnimatedVisibility의 높이를 늘려보고 이유를 찾았다. 내가 직접 작성한 코드와 Codelab의 코드 중 차이점은 Material3를 사용하는가였는데, Material3의 경우 Scaffold에서 Modifier를 정의하지 않으면 내부 블록의 UI가 중첩되고 있었다. Modifer를 정의하는 대신 Scaffold-topBar에 .. 작업 일지 2023. 5. 31. [Android][Compose] Material2→Material3의 Typography Material2에서 Material3로 이전하면서 Typography(서체) 시스템이 변경되었다. 매개변수의 수는 거의 동일하지만 이름이 달라 파악하기 어려워 아래 표로 정리했다. Material2 Material3 h1 displayLarge h2 displayMedium h3 displaySmall N/A headlineLarge h4 headlineMedium h5 headlineSmall h6 titleLarge subtitle1 titleMedium subtitle2 titleSmall body1 bodyLarge body2 bodyMedium caption bodySmall button labelLarge N/A labelMedium overline labelSmall Android/Compose 2023. 5. 26. 이전 1 다음