Android

Android/Common

[Android] ViewTree 내에 동일한 ID을 가진 위젯이 존재할 경우 UI 상태 저장 오류 해결 방법 - 2

안녕하세요. 점냥입니다. 이번 포스팅은 지난 UI 상태 저장 시리즈의 두 번째 글입니다. 1. Android에서 제공해주는 Ui View 상태 저장 2. ViewTree 내에 동일한 ID을 가진 위젯이 존재할 경우 UI 상태 저장 오류 해결 방법 Andorid 위젯은 기본적으로 ID가 지정되면 상태를 저장한다고 지난 시간에 이야기를 했습니다. 그런데 이로 인해 생각하지 못했던 부분에서 문제가 발생할 수도 있더라구요.. 실제로 얼마전 회사에서 몇시간동안 원인을 몰라 머리를 끙 싸맸던 문제였습니다. 제목처럼 동일한 2개 이상의 ViewGroup를 가진 ViewTree 내에 동일한 Id를 가진 위젯이 존재하는 경우입니다. 먼저 문제 상황을 볼까요? 문제 상황 위처럼 EditText를 FrameLayout인 V..

Android/Common

[Android] Android에서 제공해주는 UI View 상태 저장 - 1

안녕하세요. 점냥입니다 작년 11월 글 이후로 6개월 만이네요. 우연히 처음 저의 블로그에 들어와 주신 분일 수도 있지만 만약 이 글로 인해 오랜만에 다시 찾아와 주신 분이라면 먼저 감사의 인사를 드리고 싶습니다. 6개월 공백의 이유를 물어보신다면 바쁜 활동으로 인해..라고 대답하고 싶지만 게으름 때문입니다. 취직으로 인해 몸과 마음의 긴장이 풀리면서 지금까지 자기 계발 시간 없이 게임만 한 것 같습니다.. 여느 때와 다르지 않게 일요일 새벽까지 게임을 하고 침대에 누웠는 데 그런 생각이 들더라고요. "주말이 벌써 끝났네. 나 이번 주말에 뭐했더라.. 게임만 했네" 내 자신이 한심하더군요. 게임 세계에서 즐거웠던 시간들이 컴퓨터를 끄고 침대에 눕자마자 저번 주와 변하지 않은 나를 마주하다 보니.. 이제는..

Android/Common

[Android] Paging3 + Admob Native Ad

안녕하세요 점냥입니다:) 좋은 앱 서비스를 완성했다면 그다음 고민은 수익 모델이죠. AWS 등 클라우드 서비스를 통해 서버를 구축했다면 다달이 나오는 서버 비용을 무시할 수 없기 때문이에요... 그렇기 때문에 우리 Android 개발자들은 Admob 광고 SDK를 앱에 잘 녹여들 수 있게 고민을 시작해야 합니다. !!!? 갑자기 Admob.. 왜..? 그 이유는 최근 Admob 네이티브 광고를 개인 프로젝트에 적용하느라 아주 고생을 많이 했기 때문이에요... 라이브러리 자체를 적용하는 것은 어렵지 않아요. 하지만 우리 프로젝트 앱들은 모든 코드가 Activity class 하나 파일에 들어가 있는 형태는 아니잖아요? 여러 가지 다양하고 복잡한 구조로 구성되어 있는 데, 공식 문서에서 설명하는 내용은 간단..

Android/Common

[Android] 좋아요 기능으로 알아보는 더블 클릭 방지하는 방법

안녕하세요. 점냥입니다:) 좋아요 기능이란? 이 글을 읽으시는 분들 모두 좋아요 기능이 어떤 기능인 지 아실 것이라고 생각되서 설명드리기 민망하지만, 일반적으로 하트 모양의 버튼을 클릭을 하면 좋아요 혹은 좋아요 취소 요청을 서버로 보내 UI를 업데이트하는 방식일 것입니다! 그런데 문제는 클릭 액션은 발생하기 굉장히 쉽다는 것입니다. 좋아요를 눌렀다가 다시 좋아요 취소 요청을 보내는 이러한 상황은 한번이 아니라 여러번 발생할 수 있습니다. 좋아요 기능은 클릭할 때마다 상태가 변경되고 그에 따른 서버 요청들의 결과들을 UI에 표시해 주어야 하는데 단순 클릭 리스너를 사용하면 정확하게 동기화 시키는 것은 쉽지 않습니다. 이 문제를 어떻게 해결해야 할까요? 하나씩 알아보고 가장 본인에게 잘맞는 방법을 사용하시..

Android/Common

[Android] fromHtml Bullet 속성 변경하기

안녕하세요 점냥입니다 :) Android에서 리스트 형태를 표현할 때, RecyclerView를 사용하는 것이 아닌 Html 파싱해서 화면에 보여줄 수 있습니다 Html 문서를 보면 API 1 때부터 Android에서 공식으로 제공해주는 클래스예요! 첫번째 리스트 아이탬 두번째 리스트 아이탬 본론으로 돌아와서 위와 Html을 볼까요? ui 태그로 리스트임을 명시하고 있으며, li 태그로 2개의 아이템을 가지고 있다는 것을 알 수 있네요. 리스트 형태로 텍스트를 표현할 때 위와 같이 Html로 내려주면 정말 편하더라고요. 현재 Html에는 color만 지정되어 있지만, Url Link와 다양한 글자 색상, 글자 스타일이 있다면 더욱 Html을 파싱 해서 사용하는 것이 좋겠죠? Html Defulat 속성으..

Android/Compose

[Android] Compose Text 양끝으로 정렬하는 여러 방법

안녕하세요 점냥입니다:) Compose의 Text 함수는 텍스트 UI를 구현하는 함수입니다. Compose는 여러 속성을 지정하기 위해 Modifier 객체를 제공해주고 있는데 android:gravity로 지정했던 텍스트 내부 정렬 기능이 없더라고요. 공식문서에도 관련 내용이 없어서 찾아보며 공부한 내용을 정리했습니다. 구현하고자 하는 레이아웃 이번 포스팅에서 구현할 레이아웃은 사진처럼 Text가 양 끝에 정렬된 레이아웃입니다. 기본적으로 제공해주는 Compose 레이아웃 중 순서대로 가로로 정렬되는 Row 레이아웃을 사용하겠습니다. Compose용으로 ConstraintLayout 라이브러리를 제공해주지만 아직 알파버전이기 때문에 제외했습니다. Row 레이아웃 정렬하는 방법 Row 레이아웃의 속성 중..

Android/Error

[Android] Kotlin runBlockingTest 오류

안녕하세요 점냥입니다:) Kotlin으로 Android 프로젝트를 진행하면서 발생한 문제가 있고 해결 방법에 대해 말씀드리려고 합니다. 문제 상황 당시 Coroutine + Room 작동이 올바른지 테스트를 하려고 했고, Dao에 정의된 모든 함수들은 suspend로 정의되어 있기 때문에 코루틴 스코프가 필요했습니다. @Test @Throws(Exception::class) fun writeHistoryAndReadInList() = runBlockingTest { val history = History(searchWord = "test") historyDao.insertHistory(history) val findHistory = historyDao.findHistoryByWord("test") ass..

Android/Common

[Android] RecyclerView - ConcatAdapter

안녕하세요. 점냥입니다:) 굉장히 오랜만에 글을 쓰네요 ㅎ. 다들 잘 지내셨나요? 오늘은 RecyclerView 새로운 버전이 나오면서 새로운 Adapter인 ConcatAdapter에 대해서 알아보겠습니다. 사실 처음에는 MergeAdapter라는 이름으로 나왔지만 ConcatAdpater로 이름이 변경되었습니다. ConcatAdapter RecyclerView는 하나의 Adapter만을 가지며, 반복되는 뷰 리스트를 그리는 위젯입니다. 그 이유 때문에 사진과 같이 Header 혹은 Footer 등을 표현하기 위해 포지션으로 구분하고, 각 뷰 타입의 로직을 포지션 별로 구분하여 넣어주어야 했습니다. 이는 한 클래스에서 2가지 역할을 가지는 방법이며, 뷰가 복잡해질수록 코드가 비대해지는 안 좋은 방법이었..

Android/Common

[Android] LiveData의 Data를 한번만 관찰

안녕하세요. 점냥입니다:) 이번 포스팅 주제로는 SingleLiveData입니다. Android AAC LiveData의 사용법 중 하나로 LiveData를 아직 잘 모르신다면 링크를 먼저 읽어와 주세요! LiveData의 변경된 Data를 오직 한 번만 관찰? LiveData는 AAC ViewModel에서 주로 쓰이는 클래스로 뷰의 수명주기에 알맞게 데이터를 저장하는 역할을 가지고 있습니다. ViewModel에 존재하기 때문에 LiveData들은 디바이스의 가로/ 세로 전환 등 뷰가 재생성될 때에도 데이터가 유지됩니다. 따라서 뷰는 데이터를 다시 네트워크나 내부 저장소에서 가져올 필요가 없이 그대로 이전 데이터를 다시 사용할 수 있죠. 그런데 이러한 특성을 가진 ViewModel + LiveData 패..

Android/Common

[Android] MVVM 적용하기 - View와 ViewModel

안녕하세요. 점냥입니다:) 이번 포스팅으로 MVP 패턴에 이어 MVVM 패턴에 대해 포스팅하려고 합니다! MVVM 패턴은 저의 개인적인 생각으로는 가장 보편적으로 사용하는 안드로이드 아키텍처라고 생각됩니다. 만약 MVVM 패턴에 익숙하다면 Clean MVVM을 공부해보시는 것을 추천드립니다! MVVM Architecture MVVM은 Model, View, ViewModel로 이루어져 있습니다. Model은 MVP에서 사용되는 Model 개념과 동일하고 MVP에 비해 MVVM에서 달라진 점은 View와 ViewModel 간의 관계입니다. ViewModel은 MVP 패턴에서 Presenter와 유사하게 Model의 Data를 요청하고 받아 비즈니스 로직을 처리하는 곳입니다. MVP에서 Presenter와 ..

점냥
'Android' 카테고리의 글 목록 (4 Page)