일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 커스텀린트
- 함수형 프로그래밍
- 지지않는다는말
- 베드테이블
- 리얼하다
- 한단어의힘
- 목적 중심 리더십
- 면접
- 소프시스 밤부 좌식 엑슬 테이블
- 한달어스
- 프래그먼트
- 1일1커밋
- 한달브런치북만들기
- 슬기로운 온라인 게임
- 소프시스
- 베드트레이
- 한달독서
- 테트리스
- 북한살둘레길
- 재택근무
- 목적중심리더십
- 캐치마인드
- 끝말잇기
- 자취필수템
- T자형인재
- 브런치작가되기
- 어떻게 나답게 살 것인가
- 좌식테이블
- 아비투스
- 안드로이드
- Today
- Total
목록안드로이드 (164)
정상에서 IT를 외치다
안녕하세요. 블랙진입니다. 디자이너와 협업을 하게 되면 텍스트 폰트의 미묘한 차이가 얼마나 중요한지를 알게 됩니다. 같은 폰트이지만 굵기 차이 등등 미세한 차이가 전체적인 UI 느낌에 큰 영향을 미치게 되는데요. 이번 시간에는 안드로이드에서 기본적으로 제공해주는 시스템 폰트와 TextView의 fontFamily 속성에 대해 샅샅이 살펴보도록 하겠습니다. 시스템 폰트 디바이스에 미리 설치된 폰트를 시스템 폰트라고 합니다. 이는 정형적으로 많은 언어를 지원하고 있고 라이선스 비용이 없습니다. 시스템 폰트는 플랫폼의 일관성을 주고 앱의 모양과 느낌에 통일감을 줍니다. Roboto와 Noto Font 안드로이드에서 기본적으로 영어는 Roboto 폰트를, 한국어는 Noto 폰트를 사용하고 있습니다. 반면 iOS..
안녕하세요. 블랙진입니다. 정적 분석 도구인 린트에 대해서 알아보고 커스텀 린트 관련 구글 예제를 같이 살펴보고자 합니다. 린트란? 린트는 정적 분석 도구 (static analysis tool) 라고 부릅니다. 정확성, 퍼포먼스, 안정성, 국제 규격, 사용성 등등의 오류나 버그를 컴파일 타임에서 알 수 있게 해 줍니다. 이러한 린트를 통해 컨벤션에 맞는 코드를 작성할 수 있게 도와주고 버그 또한 사전에 발견하여 프로그래머가 좀 더 코딩에 집중할 수 있게 도와줍니다. 이를 통해 코딩 중에 자주 하는 실수를 피함으로써 안전하고 더욱 멋진 코드를 만드는데 없어서는 안 될 존재가 바로 린트입니다. 커스텀 린트 적용하기 구글 예제를 통해 커스텀 린트를 적용해 보도록 해보겠습니다. 커스텀 린트를 구현하기 위해서는..
AndroidStudio 혹은 IntelliJ 사용시 파일을 잘못 생성 후 재 생성했을 때 타입 인식이 안되는 경우가 있다. 이경우 Preferences 에서 Auto-detect file type by content 에 생성된 파일을 제거하면 된다. 필자의 경우 NoticeModule을 txt 파일로 잘못 만들어 .kt로 확장자를 했지만 IDE에서 인식을 못해 해결법을 찾는 중 아래 방법을 찾았다. 개발하다 보면 간혹 벌어지는 일이니 메모 :)
안녕하세요. 블랙진입니다. 우리는 종종 다음과 같은 요구사항을 받을 때가 있습니다. 텍스트가 늘어남에 따라 오른쪽에 붙어있는 아이콘이 화면을 넘어가지 않고 고정되기를 말이죠. 하지만 현실에서는 어떨까요? 겪어본 개발자는 알 겁니다. 텍스트가 늘어나면서 아이콘이 화면을 벗어나 버립니다. 우리가 원하는 위치에서 아이콘은 고정되고 텍스트만 계속 늘어나면 얼마나 좋을까요? LinearLayout, RelativeLayout 으로 해봐도 안되고 ConstrainLayout은 왠지 될듯 말듯 하면서도 안됩니다. 하지만! ConstrainLayout 을 사용해서 우리는 해결할 수 있습니다! 텍스트가 늘어남에 따라 아이콘이 마지막에 편안하게 안착하는 모습을 확인할 수 있습니다. Yeah~! 🎉🎉 그럼 어떻게 구현하는지..
SavedStateHandle 사용에 대한 단순 기록 용 포스팅입니다. 확인할 내용? SavedStateHandle은 Activity와 Fragment에서 어떻게 실제로 동작되는가? 에제 ViewModel CountSavedStateViewModel class CountSavedStateViewModel( private val handle: SavedStateHandle ) : ViewModel() { companion object { private const val COUNTER = "counter" } private var count1 = 0 private val count2 get() = handle.get(COUNTER) ?: 0 //private val countLiveData = handle...
안녕하세요. 블랙진입니다. 이전 시간에는 안드로이드에서 제공해주는 기본 기능을 사용해 ViewModel을 초기화 하는 방법을 살펴보았습니다. 이번 시간에는 DI 라이브러리인 Koin과 Hilt을 사용한 뷰모델 초기화 방법에 대해 정리해 보겠습니다. 여기서는 각 라이브러리의 기본 사용법은 제외하고 오직 ViewModel을 초기화하는 방법에 대해서만 정리했습니다. 정리 순서는 다음과 같습니다. 1. 생성자에 파라미터가 없는 경우 2. 생성자에 파라미터가 있는 경우 3. SavedStateHandle을 사용하는 경우 🚀 SavedStateHandle에 대한 자세한 설명은 Pluu Dev님의 블로그를 참고해주세요. 여기서는 생략하겠습니다. Koin 0. 모듈 생성 val appModule = module { v..
안녕하세요. 블랙진입니다. 이전 포스팅에서는 ViewModel이 무엇인지 그리고 왜 사용하는지에 대해 정리했습니다. 아직 AAC의 ViewModel이 무엇인지 모르신 분은 이전 포스팅 AAC의 ViewModel 사용 방법 정리을 참고해주세요. 이번 시간에는 두 포스팅으로 나눠 진행하겠습니다. 첫 번째는 안드로이드에서 제공하는 기본 기능만을 사용한 ViewModel 초기화 방법과 SavedStateHandle 사용법을 정리하겠습니다. 두 번째 포스팅은 대표적인 DI 라이브러리인 Koin과 Hilt를 사용한 ViewModel 초기화 및 사용 방법을 정리하겠습니다. 먼저 ViewModel 을 초기화 하는데는 크게 2가지 경우가 있습니다. 1. 생성자에 파라미터가 없는 경우 2. 생성자에 파라미터가 있는 경우 ..
안녕하세요. 블랙진입니다. 구글 문서를 보며 AlertDialog 사용법에 대해 정리해볼러고 합니다. 먼저 AlertDialog가 무엇인지 살펴봐야 겠죠? 다이얼로그란? 다이얼로그는 화면에 보여지는 작은 윈도우 입니다. 화면을 채우지 않고 사용자에게 어떤 정보를 전달하거나 추가적인 정보를 입력받을 수 있습니다. 안드로이드 에서는 Dialog Class 가 있지만 이는 Base Class이므로 직접 사용하기 보다는 Sub Class인 AlertDialog 사용을 권장합니다. (Dialog class의 Sub Class로는 DatePickerDiaog, TimePickerDialog 등이 있습니다.) 그럼 다이얼로그 생성에 관해 이미지와 코드 위주로 설명하겠습니다. 1. 제목과 설명 넣기 AlertDialo..
1. add() supportFragmentManager .beginTransaction() .add(R.id.fl_container, ExampleFragment.newInstance()) .commit() 프래그먼트를 중첩해서 화면에 보여줍니다. 뒤로가기 클릭 시(사용자의 완전한 활동 닫기) 단순 add 함수만으로는 스택에 쌓이지 않으므로 뒤로가기 시 부모 엑티비티가 제거되면서 모든 프래그먼트들이 onDestory 됩니다. 2. add() + addToBackStack() supportFragmentManager .beginTransaction() .add(R.id.fl_container, ExampleFragment.newInstance()) .addToBackStack(null) .commit()..
안녕하세요. 블랙진입니다. 구글에서는 안드로이드 개발을 하는데 ViewModel과 Repository 사용을 추천하고 있습니다. 이는 공식 문서 Guide to app architecture에 나와있는데요. 이번 포스팅은 AAC의 ViewModel이 왜 나왔는지 설명하며 앱에서 사용하는 다양한 ViewModel 초기화 방법들을 한번에 정리해보고자 합니다. 워낙 초기화 하는 방법이 다양해서 한번 정리해 보고 싶었습니다. Activiy와 Fragment는 복잡한 라이프 사이클을 가지고 있습니다. 많은 개발자들은 라이프 사이클에 맞춰 작업하는데 많은 고통을 겪고 있었고 이에 구글에서는 안드로이드 개발을 좀더 손쉽게 도와주는 라이브러리의 모음인 Jetpack을 2018년에 발표했습니다. Android Archi..