이번 프로젝트를 진행하면서 CustomView를 굉장히 많이 다뤘었고, CustomView에서 텍스트 관련 작업을 맡았는데, CustomView에서 DrawText에 대한 자료도 옛날 자료가 많고, 맨땅에 헤딩하듯이 개발하면서 겪은 경험입니다.. 우리 팀 프로젝트처럼 디테일하게 Text에 대해서 다루지 않을 수도 있지만,, 많은 도움 되었으면 합니다ㅎ DrawText란? Canvasd에서 제공하는 함수입니다. 여러 오버로딩된 함수가 많지만 보편적으로 사용되는 함수는 아래와 같습니다. public void drawText (String text, float x, float y, Paint paint) 함수의 내용은 그리고자 하는 text를 (x, y)를 시작점으로 해서 paint 객체를 이용해서 그리는 것..

Skils/Android
앞선 Navigation Component의 글의 보충 내용입니다. https://jja2han.tistory.com/373 [Android] - Navigation Component 기존의 Fragment간의 이동을 구현할 때 supportFragmentManager.beginTransaction(). replace(R.id.frame_layout,GameFragment()).commit() 위와 같은 코드를 통해서 프래그먼트 간의 이동을 구현했습니다. 하지만 Android에서 Na jja2han.tistory.com Navigation Component에 대하여.. 1️⃣ Navigation을 통해서 Activity로 이동할 수 있을까? 정답은 가능하다. 나도 사용해 보기 전까지는 Activity에 ..
앞선 글은 Github Action을 이용해서 CI를 구축해보았다.이번 글은 CD를 구축했고 그에 따른 경험을 적을 예정이다.CD가 뭐야?CD는 Continous Delivery로 지속적인 배포를 뜻한다.즉 이번 글의 목적은 Github Action으로 배포를 자동화를 어떻게 했는지에 대한 글이다. 어플리케이션의 배포 경험이 없어서 정말 많이 헤멨다.Github Action에 대한 정확한 개념이 없어서 많은 글을 찾아봤고, 참고해서 성공할 수 있었다. CD를 하기전에 버전관리에 대해서 간략하게 설명하겠다.우리가 사용하는 어플리케이션은 지속적인 업데이트로 버그를 수정하고, 기능을 추가한다.이렇듯 어플리케이션의 버전관리는 아주 기본적이라고 할 수 있다. 버전관리의 전략은 다양한 전략이 있지만 통상적으로 ..
이번 프로젝트에서 Github Action이라는것을 알게되고, CI를 적용해보았다. CI CI(Continous Integration) 지속적인 통합 CI를 제대로 구축하면 코드의 새로운 변경사항을 레포지토리에 적용할때마다 테스트,ktlint등 검사를 할 수 있다. 우리팀과 같은 경우 코틀린 컨벤션을 지키는 Ktlint를 CI로 구축해서 특정 브랜치에 push나 PR을 날릴 경우 Github action으로 등록한 workflow에 따라 자동으러 검사를 한다. 우리는 Git flow 전략에 따라서 develop 브랜치에 PR을 날릴때마다 작성한 코드의 코틀린 컨벤션을 검사한다. 위 사진과 같이 error를 감지할 경우 어디서 컨벤션을 지키지 않았는지 알 수 있다. 팀 그라운드룰로 Kotlin Conven..
이번글은 Jetpack Compose에 관한 글입니다. 현재 안드로이드 기술에서는 UI를 구현하기 위한 기술로 Xml과 Jetpack Compose 두 가지가 있습니다. Xml은 전통적인 방식으로 예전부터 사용했던 방식이고, Jetpack Compose는 떠오르는 신기술입니다. 그렇다면 왜 Xml이 아닌 새로운 방식의 기술이 등장했고, 도입하려고 하는 것인지, 그리고 제가 느낀 점에 대해서 적었습니다. Jetpack Compose란? Jetpack Compose는 네이티브 UI를 빌드하기 위한 Android의 최신 툴킷 공식문서에서 Compose를 채택해야 하는 이유는 다음과 같이 정의합니다. 간단한 코드 이전까지의 xml 방식에서는 Kotlin과 Xml을 번갈아가면서 작업을 했습니다. 하지만 Compo..
앱을 만들면서 한국인만이 사용한다면 String.xml을 이용하지 않고 문자열을 하드 코딩해서 사용하면 될 것이다. 하지만 만약 한국인이 아닌 다른 나라의 사람이 앱을 이용할 경우 문자열을 하드 코딩한다면 접근성이 매우 떨어질 것이다. android:text="아이디를 입력해주세요" 예를 들어서 이러한 텍스트가 텍스트뷰에 하드코딩으로 연결된다면, 한국인은 아이디를 입력하라는 것이구나~라고 이해를 하겠지만, 다른 나라의 사람은 다른 나라의 언어로 휴대폰을 설정해도 "아이디를 입력해 주세요"라는 문구를 만나게 될 것이다. 다국어 지원 이렇게 string.xml에 value값으로 문자열을 추가해 주는 것이다. android:text="안전한 아이디입니다" android:text="@string/correct_..
개요 기존의 사용하던 viewBinding에서 최근에는 DataBinding을 사용하는 방향성으로 바뀌고 있습니다. 저도 코드를 viewBinding을 사용해서 작성했는데, 최근에 DataBinding을 사용했고, 느낀 점과 공부한 점을 적을 예정입니다. DataBinding dataBinding의 사전적 정의는 이러합니다.(공식문서) 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선언적 형식으로 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리입니다. 즉 setText와 같이 코드적으로 UI 구성요소에 연결하는것이 아닌 어떠한 선언적 형식으로 UI 구성요소에 데이터를 연결한다고 해석할 수 있습니다. Databinding은 viewModel과 LiveData와 함께 사용..
기존의 Fragment간의 이동을 구현할 때 supportFragmentManager.beginTransaction(). replace(R.id.frame_layout,GameFragment()).commit() 위와 같은 코드를 통해서 프래그먼트 간의 이동을 구현했습니다. 하지만 Android에서 Navigation이라는 컴포넌트를 통해서 간단하게 프래그먼트 끼리의 이동을 구현할 수 있습니다. 해당 내용은 공식문서를 통해서 공부했고, 그에 대한 제 생각을 적어봤습니다. Navigation 공식문서에 따르면 Navigation의 정의는 아래와 같습니다. Navigation은 Android 애플리케이션 내에서 '대상' 사이를 탐색하는 프레임워크로, 대상이 Fragment, Activity에 관계없이 일관된..
안드로이드 개발을 시작하고 꽤 많은 코드에서 Context를 명시하라는 조건이 있었다. Context가 사전적 의미로 대충 문맥, 맥락 이런 뜻이기에 그냥 현재 Activity를 의미하는 줄 알았다. 하지만 자세히 파보니 Context가 단순 현재 Activity만을 의미하는 것이 아닌 것을 알게 되었고, 계속 공부를 할수록 Context를 명시해야 하는 코드가 많아지기에(ViewModel Observable 등등..), 개념을 정확히 이해할 필요성이 있어서 정리하려고 합니다.! 💡안드로이드에서의 Context Context란 단어 그대로 맥락을 의미하며, 현재의 상태를 나타낸다고 이해하면 편할 거 같습니다 Context에 대한 중요한 몇 가지 사실 들 애플리케이션의 현재 상태를 Context를 통해 표..