본문 바로가기

안드로이드27

안드로이드 노트 아무거나 막 적는 곳 안드로이드 에뮬레이터에서 네트워크를 차단하는 방법 계기 : 넥스터즈 4주차 UT에서 실기기 테스트 중 네트워크가 연결되어 있지 않았을 때 발생하는 크래시 발견! 생각 : 어떻게 에뮬레이터에서 재현해야 할까? 에뮬레이터에서 인터넷을 의도적으로 끌 수 있지 않을까? 검색어 : how to disable internet in android emulator 결론 : 그냥 에뮬레이터에서 데이터랑 와이파이를 끄면 된다. 회고 : 에뮬레이터가 컴퓨터에서 돌아가니까 무의식 중에 컴퓨터 네트워크를 끊어야 하나 생각했나보다 ㅋㅋㅋㅋㅋㅋ 재귀로 작성한 UI 반복으로 변경 이런 형태의 UI였다. 왜 그런 바보같은 짓은 했는지는 모르겠지만 처음엔 이 UI를 재귀로 작성했다. 참고로 UI는 Compose로 .. 2023. 7. 27.
[안드로이드] 커스텀 뷰 만들기 (CustomView) 관련된 글 : [안드로이드] layout 속성 정의 및 이벤트 구현하기 1. CustomView 에 대한 글을 왜 작성하게 되었을까? 1-1. View 의 재사용이 필요하다. CustomView 를 사용하는 이유는 View 의 재사용을 위해서다. 디자인이나 React 같은 프레임워크에서는 이런 개념을 컴포넌트라고 부른다. 디자인과 UX 의 통일성을 유지하기 위해 동일한 형태의 UI 를 여러 군데에서 사용하게 되는데 이런 UI 를 사용하는 곳마다 각각 구현하기에는 코드의 길이도 길어지고, 수정 및 관리하기에도 어렵다. 1-2. CustomView 와 include 를 비교하자면? 완전히 동일하고 글자만 바꿔주면 되는 경우에는 include 로 쉽게 해결할 수 있다. 여기서 조금 복잡해지는 정도도 inclu.. 2022. 2. 28.
[안드로이드] 반응형을 고려한 xml 마크업 (ConstraintLayout) 이 글은 특정 키워드를 검색해서 필요한 내용만 확인하는 글보다는, 가볍게 전체적으로 읽기를 바라며 작성했다. 마크업부터 잘못 작성되는 경우가 있는데, 참고할 만한 글이 되었으면 좋겠다. 특정 코드를 작성하는 방법은 이미 많은 글이 있으므로 코드보다는 의미 위주로 보면 된다. 마크업은 반응형 뿐만 아니라 추가로 나중에 수정될 것까지 고려해야 한다. 추가로 이 글은 다양한 레퍼런스를 참고하기보다는 내 개인적인 의견으로 작성된 글이니 무작정 받아들이기보다 자신의 생각과 비교하며 읽어주길 바란다. 마크업은 일반적으로 성능(View 객체가 가장 적게 생성 됨.)이 가장 좋은 ConstraintLayout 을 기준으로 작성하였다. 왜 마크업을 주의해서 작성해야 할까? 휴대폰마다 해상도, pixel ratio (pi.. 2022. 2. 26.
[안드로이드] layout <include> 속성 정의 및 이벤트 구현하기 ※ 이 글에서 설명하는 내용은 싱글 Activity 프로젝트에 적절합니다. 22.02.27. 설명 추가 : variable 로 listener 혹은 viewModel 등을 넘겨주는 방식으로도 이벤트를 연결할 수 있다. listener 를 interface 로 만들어 ViewModel 등에서 구현하여 속성값으로 넘겨주면 된다. 하지만 ViewModel 마다 직접 구현해야 하고, 코드 중복이 생기는 것은 불가피하다. View 의 재사용이 안드로이드에서 가장 아쉬운 부분인 것 같다. React 나 Flutter 같은 경우 매우 쉽게 사용중인 ui 의 일부를 떼어내어 컴포넌트화(재사용)할 수 있다. 떼어낸 ui 가 툴바라고 해 보자. 대략 위와 같은 모습일 것이다. 페이지에 따라서 BackButton 이 없을 .. 2022. 2. 10.
[안드로이드] 리사이클러뷰 데이터 바인딩 이벤트 (RecyclerView data binding) 지난 글에서 빼먹은 부분이 있다. 리사이클러뷰에서 이벤트 리스너를 연결하는 방법인데, 지금 상태에서 무지성으로 리스너를 연결한다면 아마 bind 함수에서 하게될 것이다. 이번 글에서는 Adapter 에 ViewModel 을 받아 사용하는 방법을 알아보자. 지난 글에 이어서 설명하겠다. 이번에는 지난 번보다 짧다. 1. 이벤트 함수 구현 class MainViewModel : ViewModel() { // ... fun showToastMessage(view: View, text: String) { Toast.makeText(view.context, text, Toast.LENGTH_SHORT).show() } } 내가 실제로 코딩한 순서는 이것과 다르지만, 글에서는 컴파일 에러가 나지 않는 순서대로 진행.. 2022. 1. 27.
[안드로이드] 애플리케이션 아키텍처 안드로이드 시스템같은 저수준 아키텍처가 아닌 앱 개발 수준의 아키텍처에 관한 글이다. 안드로이드를 시작하는 사람의 프로젝트 구조 안드로이드는 처음 배우고 애플리케이션을 만들면 많은 사람들이 Activity 와 layout 을 담은 xml 파일만을 이용해 코드를 작성한다. 물론 다른 개발 경험이 많다면 그러지 않을 수도 있다. 어쨋든 이렇게 코드를 작성하다 보면 Activity 코드가 걷잡을 수 없이 커진다. ViewModel 의 분리 애플리케이션에서 중요한 것은 무엇일까? 바로 비즈니스 로직이다. 비즈니스 로직은 UI 와는 전혀 관련이 없다. Todo list 애플리케이션으로 예를 들어보자. "할 일을 저장한다." 와 같은 비즈니스 로직에 UI 와 관련된 언급이 있는가? 전혀 없다. View(GUI) 는.. 2022. 1. 23.
[안드로이드] 리사이클러뷰 데이터 바인딩 (RecyclerView data binding) https://github.com/android/architecture-samples GitHub - android/architecture-samples: A collection of samples to discuss and showcase different architectural tools and pattern A collection of samples to discuss and showcase different architectural tools and patterns for Android apps. - GitHub - android/architecture-samples: A collection of samples to discuss and showcase... github.com 이 프로젝트를 보.. 2022. 1. 15.
[안드로이드] ViewModel 에서 이벤트 처리하는 방법 (SingleLiveEvent) MVVM 에서 View 는 xml, Activity, Fragment 등이 해당된다. ViewModel 에서는 View 에 필요한 데이터들을 갖고 있고, 데이터들을 조작하는 로직들을 갖고 있다. View 에서는 데이터들을 구독하고 있다가 변경이 감지되면 UI 를 업데이트 한다. (이 글에서는 xml, Activity, Fragment 를 모두 View 라고 부르겠다.) UI 관련된 코드가 View 에 들어간다고 해서 ViewModel 에서는 View 와 전혀 관련 없는 일을 하는 게 아니다. View 와 매우 관련있는 것이 ViewModel 이지만, View 에 의존하고 있지 않을 뿐이다. ViewModel 은 View 의 코드가 변경되어도 전혀 영향을 받지 않는다. onClick 이벤트는 어디서 구현할.. 2022. 1. 14.
[안드로이드] Retrofit 을 이용하는 6가지 방법 (수정 : 22-01-13) ※ 2023-10-15 Retrofit 관련된 새로운 글을 작성했습니다. 해당 글을 읽어주시길 바라며, 이 글은 더 이상 읽지 않을 것을 권장합니다. ※ 주의사항(2023-06-19 코멘트 추가) 이 글은 과거에 작성된 글로 조금 잘못된 지식을 설명하고 있습니다. 곧 수정할 예정이지만 혹시 그 전에 읽는다면 반드시 아래 내용을 유의하여 읽어주세요. viewModel에서는 코루틴 스코프를 직접 만드는 것이 아닌 viewModelScope를 이용해야 합니다. viewModelScope는 Main 스레드를 이용합니다. Retrofit2의 serviece를 만들 때 즉, api interface를 정의할 때 단순히 fun 앞에 suspend 키워드를 붙여주면 별도의 Adapter를 정의하지 않고 코루틴을 이용하.. 2022. 1. 10.