전체 글
-
Fullscreen으로 동작하는 Custom Dialog 만들기Android 2023. 3. 5. 12:49
개요 Fullscreen으로 동작하는 Dialog를 만드는 방법으로는 크게 두 가지가 있다. Dialog처럼 보이는 Activity를 만들어 띄우기 Dialog를 Customizing하여 Fullscreen으로 띄우기 둘 중 어떤 것이 베스트라고 할 수는 없지만, 기왕이면 ‘다이얼로그’라는 이름답게 2번 방식을 따라 보기로 했다. 최초 작성 코드 언어는 java였으나 kotlin으로 변경하였고, findViewById 대신 ViewBinding 을 적용하였다. 완성본 미리 보기 SHOW DIALOG 버튼 클릭 시 Fullscreen으로 동작하는 Dialog가 출력되고, SUBMIT/CANCEL 버튼 클릭 이벤트와 동시에 Toast가 출력되는 예제 앱이다. 코드 작성 MyCustomDialog 라는 이름의..
-
LiveData vs StateFlow, Why we should use the 'StateFlow'?Android 2023. 3. 5. 12:46
LiveData 는 Lifecycle 라이브러리 중 하나로, 안드로이드 공통의 라이프사이클과 관련된 문제를 해결할 수 있게 해 주면서 앱 개발 시 보다 더 유지보수하기 쉽게, 테스트하기 쉽게 만들어주는 라이브러리입니다. LiveData 는 옵서버 패턴을 활용하여 구현되었으며, 관찰 가능한 일반 클래스인 ObservableXXX 클래스와는 달리 LiveData 는 생명주기의 변화를 인식합니다. 즉, Activity, Fragment, Service 등 안드로이드 컴포넌트의 생명 주기 인식을 통해 Active 상태에 있는 컴포넌트에서만 업데이트합니다. LiveData 를 사용했을 때 장점은 아래와 같습니다. Activity 와 Fragment 는 LiveData 객체를 안전하게 관찰할 수 있고, 생명 주기가..
-
MotionLayout을 활용하여 간단한 Animation 만들기Android 2023. 3. 4. 02:34
최근 디자인 개편 중 자연스러운 애니메이션을 적용해야 하는 업무가 생겼습니다. CollapsingToolbarLayout과 비슷하지만 6개의 뷰 위치/노출 처리가 필요한 상황이었습니다. 2개 이상의 뷰를 제어하는 처리라 CollapsingToolbarLayout으로는 해결할 수 없어 MotionLayout을 활용해야 했습니다. 그래서 이번 포스팅은 MotionLayout을 알아보고 정말 간단한 Animation 만들기입니다 :) MotionLayout MotionLayout은 Google I/O ‘18에 처음 도입되었으며 이후 많은 개선을 거치고 있습니다. 사실 MotionLayout은 완전히 새로운 기능으로 도입된 것은 아니고, 원래 ConstraintLayout에서 애니메이션 효과를 주기 위해 사용한..
-
RecyelrView Anti PatternsAndroid 2023. 3. 4. 02:24
안녕하세요. 메시업 안드로이드 10기 이두한입니다. 이번엔 Android Weekly에 올라온 RecyclerView-AntiPatterns 내용을 번역하여 포스팅해보겠습니다. 1. Initializing in bindView 첫 번째는 뷰를 완전히 재사용하지 않는 안티패턴입니다. RecyclerView에서 텍스트뷰 하나만을 보여주는 예제입니다. class RecyclerViewAdapter( private val onItemClick : (Data) -> Unit ) : RecyclerView.Adapter() { //..Other overrides private val itemList: List = //...DO STUFFS inner class MyViewHolder(val itemView: Vie..
-
Paging3:IntroductionAndroid 2023. 3. 4. 02:20
Paging3 적용기 Android Jetpack에 포함된 paging library가 이번에 paging3 베타버전을 배포했다고 해서 제 개인 프로젝트에 적용해 보았습니다 우선 시작하기 전에 제 프로젝트에 대해 설명드리겠습니다. 제 프로젝트는 NewsCalendar로 가까운 미래에 존재하는 사회적 이슈나 이벤트들을 미리 모아 보는 서비스 입니다. 이를 위해 Naver 검색 api를 사용했고 Room을 사용해 뉴스기사들을 Local DB에 저장해야 합니다. Naver Api에서 내려오는 Article을 정의해 보았습니다 @Entity(tableName = "articles") data class Article( @PrimaryKey @SerializedName("originallink") @ColumnI..
-
코루틴(Coroutine)의 일시 중단 함수 사용하기Kotlin 2023. 3. 4. 02:13
Composing Suspending Functions 이번 포스팅에서는 코루틴의 일시 중단 함수를 조합하여 활용하는 방법을 알아본다. ※ IntelliJ나 Android Studio가 설치되어 있지 않다면 Kotlin 공식 사이트에서 지원하는 온라인 IDE(Kotlin Playground)를 사용하여 아래 코드를 실행할 수 있다. Sequential by default 아래 코드는 어떤 유용한 기능(?) 두 가지를 순차적으로 실행 및 조합하여 결과를 내도록 구현되어 있다. fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefulTwo() printl..
-
Shared Element in NavigationAndroid 2023. 3. 4. 02:09
안드로이드 JetPack Navigation을 사용 중일 때 프래그먼트 간에 위와 같이 요소(이미지)를 공유하려면 어떻게 해야 할까요?안드로이드 공식문서에 이렇게 나와있습니다.FragmentNavigator.Extras클래스를 사용하면FragmentTransaction.addSharedElement()를 사용하는 것과 유사하게 공유 요소를 전환 이름으로 한 대상에서 다음 대상으로 매핑할 수 있습니다. 그런 다음 아래 예와 같이 추가 항목을navigate()에 전달하면 됩니다. FragmentNavigatiorExtras @Suppress("FunctionName") fun FragmentNavigatorExtras(vararg sharedElements: Pair) = FragmentNavigat..
-
CI / CDAndroid 2023. 3. 4. 02:06
안녕하세요! 10기 유희진입니다! 이번에 프로젝트를 진행하는 도중 팀장님께서 ‘ci 적용해 놨으니 머지하기 전에 ci test 다 돌고 success 하면 머지해 주세요’라고 하셨습니다. 저는 못알아들었고.. 그래서 ci에 대해서 공부한 내용을 적어보려고 합니다. Background 소프트웨어가 거대해지고 복잡해지면서 팀 단위로 개발하게 되었고, 그 과정에서 분업과 협업은 필수가 되었습니다. 이 과정에서 Merge 과정은 까다롭고 테스트하는데 큰 자원을 소비하게 됩니다. 이 문제를 해결하기 위해 도입되었습니다. 개발 브랜치가 일정 기간 이상 이용되면, 통합의 어려움은 커지고 충돌 해결에 들어가는 시간이 길어지고 오류 발생 위험이 커집니다. 이를 극복하고자 변동 내용의 반영 빈도를 늘리는 자동화가 등장합니..