분류 전체보기 (101) 썸네일형 리스트형 [EditText] 날짜 입력하기 with Flow 개인 프로젝트에서 날짜를 입력하는 화면이 있다.조건시작일은 필수로 입력해야 하며, 종료일은 선택할 수 있다.EditText가 형식에 맞게 채워지면 초록색 테두리로 변한다.화면에 주어진 EditText가 모두 YYYY-MM-DD 형식으로 채워져야 등록버튼이 활성화된다.날짜 범위가 올바르지 않다면 Toast Massage 알림 상태 정의class DateViewModel: ViewModel() { private val _startDate = MutableStateFlow("") val startDate = _startDate.asStateFlow() private val _endDate = MutableStateFlow("") val endDate = _endDate.asStateFlo.. AppWidget - View 구성 요소Widget LayoutAppWidgetProviderInfoAppWidgetProviderRemoteViewsWidget LayoutWidget은 기본적으로 RemoteViews를 사용한다.RemoteViews에 사용할 수 있는 View는 제한적인데, 종류는 다음과 같다.이를 이용하여 아래와 같은 간단한 위젯을 만들 수 있다. RemoteViews에 사용할 수 있는 View와 Layout을 사용하여 자유롭게 Widget을 디자인 할 수 있지만, Widget의 크기를 고려하여 구현해야 한다. AppWidgetProviderInfoAppWidgetProviderInfo는 Widget의 필수 속성들을 정의하며, XML로 구현할 수 있다.(해당 파일의 경로는 res/xml/ 에 저장한다.) .. Navigation Component 기존에 Fragment를 사용하기 위해선 FragmentManager를 사용하여 Fragment에 필요한 작업들을 수동적으로 처리해줘야 했다.fragmentManager = supportFragmentManagerval transaction = fragmentManager .beginTransaction() .addToBackStack(name)transaction.replace(R.id.nav_host_fragment_content_main, fragment).commit() Jetpack의 Navigation Component는 이러한 부분들을 좀 더 쉽고 간편하고 직관적으로 사용 할 수 있도록 도와주는 라이브러리이다. 구성 요소Na.. Fragment Activity는 사용자 인터페이스를 제공하고 사용자와의 상호작용을 담당하는 컴포넌트이다.Fragment는 하나의 Activity에 여러가지 화면을 보여주고 싶은 경우 사용한다. 대표적으로 BottomNavigatin을 예로 들 수 있는데, 하단의 메뉴를 클릭할 때마다 화면 전체가 아닌 중간 화면만 메뉴에 맞는 화면으로 변경되는 것을 볼 수 있다. Fragment LifecycleFragment에는 Attach와 Detach가 추가로 있는데, 이 2가지를 포함하여 실행 순서를 보면 다음과 같다.onAttach → onCreate → onCreateView → onViewCreated → onStart → onResume → onPause → onStop → onDestroyView → onDestroy.. [View] Progress Bullet Point 이전에 구현한 Bullet Point를 바탕으로 잔행 상태를 나타내는 Progress Bullet Point를 구현해보자.https://snaildeveloper.tistory.com/145 [View] 글 머리 (Bullet Point) 만들기TODO 앱 개인 프로젝트를 리팩토링하면서 나의 일정 목록을 좀 더 직관적으로 보여주고 싶었다.그래서 나만의 Bullet Point를 만들어 사용하기로 하였다. Bullet Point는 Canvas의 Circle과 Line을 사용하여snaildeveloper.tistory.com 진행한 부분은 실선으로, 아직 미진행 부분은 점선 및 회색으로 표시하여 상태를 아래와 같이 나타낼 수 있다. 상태해당 프로젝트에서의 상태는 4가지가 있다.성공 - 초록색실패 - 빨간색진행.. [View] 글 머리 (Bullet Point) 만들기 TODO 앱 개인 프로젝트를 리팩토링하면서 나의 일정 목록을 좀 더 직관적으로 보여주고 싶었다.그래서 나만의 Bullet Point를 만들어 사용하기로 하였다. Bullet Point는 Canvas의 Circle과 Line을 사용하여 구현하였는데, 고려해야 할 사항이 몇 가지 있었다. 리스트에서 사용하기에 RecyclerView의 Item에 선언된다.Item에 선언되기에 각 Item의 Position에 따라 모양이 달라진다. ex) 첫 번째 Item의 경우 원 위쪽 라인이 필요가 없다. 1. 인터페이스 생성확장성을 고려하여 다양한 Bullet Point를 구현할 수 있도록 Circle과 Line에 대한 Interface 생성interface Bullet { fun drawLineUp(canvas:.. [DataBinding] BindingAdapter 함수 파라미터 전달 프로젝트 리팩토링을 진행하던 도중 Tab을 구현할 일이 생겼는데, MVVM을 사용하고 있었기에 Tab 관련 설정을 BindingAdapter를 통해 구현하고자 했다. 관련하여 addTabSelectedListener를 설정하기 위해 BindingAdapter 파라미터로 함수를 전달하려 했지만 다음과 같은 오류를 만났다. object TabBindingAdapter { @JvmStatic @BindingAdapter("app:tab_selected") fun tabSelectedListener(tabLayout: TabLayout, changedTab: (StatisticsTab) -> Unit){ tabLayout.addOnTabSelectedListener(object : .. Git 내부 동작 분석 Github에서 레포지토리를 새로 만들면 다음과 같은 가이드가 나온다. 지금부터 init부터 branch까지 명령어에 따라 내부적으로 어떤 방식으로 작업이 이루어지는지 살펴보도록 한다. 1. git initLocal에 레포지토리를 연결 할 폴더를 하나 만들고 터미널을 통해 git init 명령어를 실행하면 .git 폴더가 생성된다. .git 폴더 내의 폴더 및 파일들은 Git 작업을 위한 각자의 역할들을 수행한다.2. git addgit init을 수행한 폴더에 test/test.txt 파일을 만든 후 git add를 수행하면 두 가지의 작업이 실행된다. 1) Blob 파일 생성objects 폴더 내에 Blob 파일이 생성되는데, add 명령어로 추가한 파일 내용으로 Hash 알고리즘을 돌려 나온 Has.. Compose 프로젝트 일부 MVI로 마이그레이션 지금까지 MVI를 간단한 스톱워치로 알아봤는데, 스톱워치 기능 자체가 간단하다보니 MVI의 장점을 크게 느끼지 못했다. 전에 팀 프로젝트로 진행했던 Compose 프로젝트 일부를 Orbit 라이브러리를 이용하여 MVI를 적용해보고, 전과 후를 비교하여 어떤 차이가 있는지 확인해보고자 했다. MVI를 적용할 부분은 SavePhotoScreen으로, 사진을 찍고 추가적인 정보(라벨, 설명 등)를 입력 후 저장하는 기능을 담당한다.https://github.com/boostcampwm-2024/and04-Nature-Album/blob/dev/app/src/main/java/com/and04/naturealbum/ui/add/savephoto/SavePhotoScreen.kt and04-Nature-Album.. MVI 라이브러리 - Orbit with Compose MVI 첫 포스팅에서는 라이브러리 없이 MVI 패턴을 구현해보았다.https://snaildeveloper.tistory.com/140 MVI 패턴스톱워치는 시간과 시작/종료 버튼, 리셋 버튼이 있다.사용자가 시작 버튼을 누르면 시간이 올라가며, 종료 버튼을 누르면 시간이 멈추게 되고, 리셋 버튼을 누른다면 시간이 0으로 초기화 된다.snaildeveloper.tistory.com Orbit 라이브러리를 사용하면 보다 쉽게 MVI 패턴을 구현할 수 있다.https://github.com/orbit-mvi/orbit-mvi GitHub - orbit-mvi/orbit-mvi: A simple MVI framework for Kotlin Multiplatform and AndroidA simple MVI f.. 이전 1 2 3 4 ··· 11 다음