Android

안드로이드/안드로이드

Planfit 프로젝트하면서 생긴 이슈 및 해결 ,기술 정리

1. StateFlow를 사용하여 Splash화면에서 알맞은 화면으로 navigation을 하거나  대기하는 역할을 수행해야 되는데 화면의 이동이 원할이 되지 않았습니다. 이전 코드@HiltViewModelclass PlanfitSplashViewModel @Inject constructor( private val getPlanfitLoginType: GetPlanfitLoginType,) : ViewModel() { private val _isLoginFlow = MutableStateFlow(LoginEvent.UnChecked) val isLoginFlow: StateFlow get() = _isLoginFlow fun checkLoginState() = viewM..

안드로이드/안드로이드

Planfit onBoarding 페이지 클론 코딩 회고

현재 서비스 중인 Planfit이라는 앱의 onBoarding페이지를 클론 코딩해 보았습니다.지금까지 클론코딩을 할 때는 강좌나 책 등을 보며 해당 프로젝트를 클론코딩을 했었는데 이번에는https://wwit.design/2023/07/24/planfit/ Lifeplus한국의 UI/UX 모바일 패턴을 수집합니다.wwit.design해당사이트를 참고하여 만들었습니다. 화면만 보고서는 해당 화면이 어떻게 돌아가는지 알 수 없었습니다. 그래서 해당 앱을 설치하고 어떻게 돌아가는지 관찰 후에 해당 화면의 흐름을 다이어그램으로 만들었습니다.다이어그램을 만들다 보니 wwit에 나오는 Planfit페이지는 iOS 환경에서의 이미지라는 것을 알게 되었습니다. 그렇다고 안드로이드 기기에서의 모드화면을 캡처하고 해당 화..

안드로이드/AAC(Android Architecture Components)

[AAC] DataBinding의 정의와 적용

AAC 중 DataBinding에 관하여 포스팅을 해볼까 합니다. DataBinding 드로이드 애플리케이션에서 UI 구성 요소를 애플리케이션 데이터 소스에 결합할 수 있는 기술입니다. 이 기능을 사용하면 XML 레이아웃 파일에서 직접 데이터 객체에 접근할 수 있으며, 코드의 간결성과 유지보수성을 크게 향상시킬 수 있습니다.  이렇게 설명한다면 사람들은 ViewBinding과 무슨 차이가 있냐고 의문을 가질수있습니다. 이 둘의 차이는  XML 레이아웃 파일에서 직접 데이터 객체에 접근할 수 있다는 점입니다.  이는 큰차이입니다. ViewBinding의 장점은 더 이상 View를 findViewById를 통하여 가지고 올필요가 없어진 것입니다. 이것만으로 코드의 양이 줄어 좀 더 간결하고 성능의 향상을 볼..

안드로이드/안드로이드

[Android/Kotlin] flatMapLatest 로 리팩토링

필자가 앱을 완료하고 리팩토링을 하는 중이었습니다. override fun getAllBudgetsToFlowWhenBudgetChanged(): Flow = flow { budgetDataSource.getAllBudgetsOrederByDateToFlow().collect { budgets -> val list = budgets.map { budget -> val categoryProceduresList = categoryProceduresDataSource.getAllCategoryProceduresWithBudgetNum(budget.num) val reduce = categoryProceduresList.sumOf { categoryProcedures -> categoryProcedures.pr..

안드로이드/UI

[Android/UI] EditText 입력시 형식대로 넣어주기

이러한 EditText에 저는 값을 입력하면 내가 원하는 형식대로 EditText의 값을 바꿔주고 싶습니다. //in Activity private val decimalFormat = DecimalFormat("#,###") private var resultMoney: String = "" budgetMoneyEdittext.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } override fun onTextChanged(charSequence: CharSequence?, p1: Int, p2: Int, p3: Int) { if(..

안드로이드/안드로이드

[Android/Kotlin] 액티비티의 종료로 ViewModel이 죽어버렸다!

https://github.com/LESSERAFIM-Aespa/TripMate/issues/126 가계부 컨탠츠(BudgetContentActivity) 가계부 수정시 버그 · Issue #126 · LESSERAFIM-Aespa/TripMate “가계부 컨탠츠(BudgetContentActivity) 가계부 수정시 버그” Describe the bug 가계부 수정시 카테고리를 추가하거나 삭제할경우 해당 카테고리가 추가되거나 삭제되지 않는 이슈가 발생 카테고리 삭재 github.com 개발을 하면서 액티비티에서 ViewModel의 함수를 사용 중, contentViewModel.updateBudgetAndCategories(budget.copy(num = budgetNum), categories) fi..

안드로이드/안드로이드

[Android/Kotlin] 알림(Notification) - 2, 알림의 속성

3. Notification의 정보를 입력후 알림을 등록 builder.run { setSmallIcon(R.mipmap.ic_launcher) setWhen(System.currentTimeMillis()) setContentTitle("키워드 알림") setContentText("설정한 키워드에 대한 알림이 도착했습니다!!") setStyle( NotificationCompat.BigTextStyle() .bigText("설정한 키워드에 대한 알림이 도착했습니다!!") ) } manager.notify(NOTIFICATION_ID, builder.build()) Notification 구성 해당 알림은 기본적인 형태의 알림입니다. 작은 아이콘: 필수 구성요소이며 setSmallIcon()을 통해 설정..

안드로이드/안드로이드

[Android/UI] BackGroundTint 값 Hex값으로 설정

여러 뷰들을 사용하다 보면 background를 설정해 놓고 필터처럼 색만 바꾸고 싶을 때가 있습니다. 이럴 때 쓰이는 속성인 BackGroundTint라는 속성값이 있습니다. 필자는 해당값을 xml이아닌 코틀에서 바꿔야 되는 상황을 격었습니다. 이러한 코드들을 찾아보니 viewStateCircleItem.backgroundTintList = when (data.isAvailable) { true -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.stateGrean)) else -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.gray..

안드로이드/안드로이드

[Android/Kotlin] Room 외래키 적용

이번에 프로젝트를 하게 되면 Room을 이용해 DB를 적용해 보았습니다. 처음에는 이러한 구조로 entity들을 설계하였습니다. 이렇게 만들려고 하니 Room에서 외래키의 연결이 잘못돼있다면서 787 에러를 보여줬습니다. 위의 구조의 경우 순환 참조가 일어납니다. 모든 테이블이 연결돼있으므로 참조할 수 없게 되는 현상이 생깁니다. 그래서 해당 참조를 끊어줘야 합니다. 이관계에서는 사실상 과정테이블의 경우 budgetNum은 필요가 없습니다. 편의를 위해 만든 것일 뿐 해당 과정이 어떤 가계부에 속해있는지는 부모인 카테고리를 따라 올라가다 보면 가계부를 찾을 수 있습니다. 변환시킨 DB 구조입니다. 이 구조를 코드로 만들면 @Entity( tableName = "BUDGET", ) data class Bu..

안드로이드/안드로이드

[Android/Kotlin] 알림(Notification) - 1, NotificationChannel 속성

이전에 알림의 채널에 관련돼서 포스팅을 했지만 알림에 관해서는 정리를 안 한 것 같아 알림 기능을 정리해 볼까 합니다. 알림은 이러한 구조로 구성됩니다. NotificationManager : 알림을 시스템에 발생시키는 SystemService Notification : 알림 구성 정보를 가지는 객체 NotificationCompat.Builder : 알림을 다양한 정보로 생성 NotificationChannel : 알림의 관리 단위(Android Oreo에서 추가) 이제 위 구조들을 이용하여 알림을 생성시켜 봅시다. 1. 처음에는 NotificationManager를 안드로이드에서 받아 와야 합니다. val manager = getSystemService(NOTIFICATION_SERVICE) as N..

감자씨앗
'Android' 태그의 글 목록