Spinner란 왼쪽뷰이고 오른쪽 DropDown 리스트를 손쉽게 붙일 수 있게 해준다. (Spinner + ArrayAdapter) 사실 요즘은 AutoCompleteTextView 에 ArrayAdapter를 연결하는 방식으로 많이 쓰고 있다. 다만, 오래된 코드의 경우 Spinner 를 사용하는 경우가 종종 있으니 알아는 둬야겠지.. 커스터마이징 하고자 했던 것은 DropDown 아이템을 클릭했을 때 리스너를 붙이는 것이었다. 그러기 전에 일단 Spinner 와 AutoCompleteTextView 에서 ArrayAdapter의 동작 차이점을 살펴보자. Spinner vs AutoCompleteTextView Spinner binding.spinner.onItemSelectedListener = o..
특정한 뷰의 가로 세로 비율을 특정 값으로 조정하고 싶은 경우가 있다. 어떠한 방법들이 있을까? 가로 세로 비율을 1: 0.61 (세로 길이 = 가로길이 * 0.61) 로 지정한다는 가정하에 코드를 살펴보겠다. 1. Programatically 하게 적용하기 binding.ivCompany.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { binding.ivCompany.viewTreeObserver.removeOnGlobalLayoutListener(this) binding.ivCompany.layoutParams.height =..
안드로이드 개발자들은 이제 Clean Architucture MVVM 패턴을 대부분 알고 있고 공통적인 개발 방향에 대해서 논의할 수 있을 정도의 기술 전파가 되었다고 본다. 그래서 다른 사람들의 코드를 보더라도 예전처럼 구조 파악이 안되는 경우가 많이 없어졌다. 하지만 과연 MVVM 아키텍처를 완벽하게 구현하고 있는 회사는 얼마나 될까? 모두 제각각 자기 회사의 레거시 코드, 개발자 인원, api 규격 등에 의해서 맞춤형 MVVM 패턴을 적용하고 있을거라고 생각된다. 사이드 프로젝트에는 내가 이해한 MVVM 패턴을 문제 없이 구현할 수 있다. 하지만 회사 코드는 내가 하고 싶은데로 할 수가 없어.. 내가 오늘 정리하고자 하는 것은 이렇다. Clean Architecture는 크게 2가지로 구분되고 있다..
ConstrainedWidth, constraintHorizontal_bias 속성 활용 왼쪽에 가변적인 뷰가 있고, 오른쪽에 고정 뷰가 있는 아래와 같은 뷰를 구성하고자 했다. Constraint 속성 구성을 이렇게 구성해봤다. 가변뷰 startToStartOf : parent endToStartOf : 고정뷰 width : wrap_parent ellipsize : end 고정뷰 startToEndOf : 가변뷰 endToEndOf : parent width : 50dp 결과는 아래와 같이 되구려.. 이유는 startToStartOf 와 endToEndOf 의 속성의 우선순위가 같기 때문! 그래서 레벨이 같다면, 왼쪽에 있는 옵션이 우선 되는 것. 그렇다면, 왼쪽에 있는 가변뷰에 "나는 가변형이야! ..
Compose를 통해 layout (xml) 이 사라질 수 있다. 왜 바꾸게 되었을까? UI tookit에 새로운 기능을 제공 할 때 마다 API 버전을 올려야 하기 때문에 완전히 제공 되려면 오랜 시간이 필요하다. 커스텀뷰 개발 하면서, 너무 실수도 많이하게되고 기본 지식도 많아야해서 불편했죠? 뷰와 관련된 파일이 너무 많아진다. (style, attr, xml 등등) xml과 뷰(Activity, Fragment) 와의 통신에 대한 아키텍처에 대한 방법이 너무 다양하다! (개발자마다 선호도가 달라😂) 선언형 패러다임 코드 파악이 쉬워진다. 한 곳에 모여있으니까? 좋다. 명령형 vs 선언형 compose 특징 compose에는 Visibility = View.Gone 이런 코드가 필요 없다. Compo..
스레드간 통신을 알려면 먼저 스레드가 어떻게 구성되고 돌아가는지 알아야 한다. Thread 구성 요소 Thread: 프로세스 내의 세부 작업 단위 Handler :아래의 2가지 역할을 한다. (다재 다능한 놈) Message, Runnable Task 를 Message Queue로 전달 Message, Runnable Task 를 실행 Looper : Message Queue에서 Handler로 전달 Message Queue : Message, Runnable Task를 저장하는 Queue 생각보다 복잡하다. 안드로이드 개발에서 가장 많이 하는 실수중에 하나가 Thread를 만들고 그 안에서 UI 변경 작업을 실행하는 경우이다. 바로 에러가 터진다! Thread th = new Thread(new Run..
위에처럼 FullScreen 이면서, StatusBar가 투명으로 나오는 뷰를 그리고자 한다. 구글링 결과, 아래 사항들만 적용하면 된다고 한다. 그리고 왠만하면 Java(Kotlin) 코드로 작성하는 것 보다 XML에서 작성하고 Style 적용이 코드 유지보수에 좋아서 시도를 해봤다. true @android:color/transparent true // 시스템바를 백그라운드에 그린다. true windowTranslucentStatus : StatusBar를 반투명하게 설정한다. statusBarColor : StatusBar 색상을 설정한다. (API 21 이상부터 적용 가능) windowDrawsSystemBarBackgrounds : StatusBar를 백그라운드 위에 그린다. windowFul..
검색 키워드: #Clicking back button twice to exit an activity with RxJava 먼저 Throttle, Debounce에 대해서 알아보겠습니다. /** * RxBinding의 Throttle 기능 사용하는 Button 함수 * @param throttleSecond 해당 시간동안 중복 클릭 방지 (기본으로 1초) * @param subscribe 클릭 리스너 정의 */ fun Button.onThrottleClick(throttleSecond: Long = 1, subscribe: (() -> Unit)? = null) = clicks() .throttleFirst(throttleSecond, TimeUnit.SECONDS) .observeOn(io.reactiv..