목록안드로이드/안드로이드 개발 (64)
우찬쓰 개발블로그
MVVM 아키텍에서 LiveData를 쓰다보면 흔하게 마주할 수 있는 상황이 바로 Event 일회성 처리에 대한 문제이다. private val _eventStartSettingActivity = MutableLiveData() val eventStartSettingActivity: LiveData get() = _eventStartSettingActivity MainActivity로부터 SettingActivity를 시작하는 다음과 같은 event용 LiveData가 있다고 해보자. 이 이벤트를 emit하는 곳은 activity_main.xml에서 onClick을 처리하도록한 databinding이라고 생각하고, 이 클릭이벤트의 대한 메소드를 아래와 같이 정의했다. fun onClickSettingMe..
안드로이드 10부터 다크모드를 지원하기 시작했지만, 실제 적용해본적이 없어서 토이프로젝트에 적용해보기로 했습니다. 일단 결과물을 볼까요? 저는 기본적으로 흰색과 검은색으로 테마를 정했기 때문에, 깔끔한 다크모드가 적용된 것을 보실 수 있습니다. 그럼 바로 그 과정을 시작해봅시다. 위처럼 기존에 하드하게 박혀있던 컬러를 걷어내야 되겠죠? 이제는 values에 있는 color.xml을 복사해서 한벌을 더 준비해줍니다. 다크모드에 들어갈 color.xml은 values-night에 넣어주시면 됩니다. 그리고 저는 텍스트 컬러를 직접 이름으로 구분하여 컬러를 각각 다르게 넣어줬습니다. themes도 마찬가지로 나누어서 두벌을 준비하고, 각각의 설정 컬러를 새롭게 적용해줍니다. 이렇게만 하면 끝입니다! 라고 말하..
chrome://inspect
EditText 에서 clearFocus를 호출하는 기능을 넣고, 잘 되는것 까지 확인한 후에 QA넘겼는데, 일부 폰에서 제대로 focus가 사라지지 않는 이슈가 있었다. 문제의 폰은 샤오미 Redmi 6였고, focusable을 root 뷰에 true로 준 상태인데도 불구하고, 제대로 먹히지 않았다. 결국 문제를 찾고보니 특정 기종에서는 android:focusableInTouchMode 도 true로 해줘야 되는 것으로 확인 되었다. 귀찮지만 아래의 두개 다 true로 주는 것을 기억하도록 하자. android:focusable android:focusableInTouchMode
ConstraintLayout으로 구성된 자식중에 중간의 TextView가 글이 너무 길어 다른뷰를 침범할때, singleLine으로 두고 elipsize 시키고싶다면? app:layout_constrainedWidth="true" 이 옵션을 주면, 제한범위를 넘지 않게된다.
그냥 다운받을 수 있는 android opencv sdk는 불필요한 모듈이 포함되어있으므로 빌드시 용량이 크다. (https://sourceforge.net/projects/opencvlibrary/files/4.3.0/opencv-4.3.0-android-sdk.zip/download) opencv 소스를 새로 크로스컴파일하여 경량화 해보자. 1. ABI 선택 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64' 의 총 4개의 ndk cpu종류(ABI)에서, x86과 x86_64(인텔 cpu)용은 용량이 크고, 대부분의 스마트폰은 arm cpu이므로 버려도됨. 'armeabi-v7a', 'arm64-v8a' 두개만 필요. (그냥 다운받을 수 있는 android opencv sd..
안드로이드 풀스크린엔 옵션이 많은데, 그 옵션을 간략히 살펴보자 val decor = window.decorView as FrameLayout var uiOption = window.decorView.systemUiVisibility uiOption = uiOption or SYSTEM_UI_FLAG_HIDE_NAVIGATION or SYSTEM_UI_FLAG_FULLSCREEN or SYSTEM_UI_FLAG_IMMERSIVE_STICKY decor.systemUiVisibility = uiOption SYSTEM_UI_FLAG_HIDE_NAVIGATION - sdk version 14이상 부터 가능한 옵션. 네비게이션바를 가려준다. SYSTEM_UI_FLAG_FULLSCREEN - sdk versio..
quit() : 즉시 루퍼 종료. quitSafely()는 : 메시지 큐에 쌓인 메시지 전부 처리후 루퍼 종료.
보통의 체크박스는 다음과 같다. 보통 여기서 디자인을 넣게되면 다음과 같이 작업을 하곤한다. 이렇게 커스텀으로 이미지를 사용해야하는 경우 android:button="@drawable/custom_image" 를 통해 넣게되는데, 이 방식으로 체크박스 이미지를 변경하는 경우 문제점이 하나 있다. 백그라운드도 또한 체크여부에 따라 디자인이 바뀌어야 되는경우, 정상적인 방법으로는 저 앞에 부분의 공간을 띄울 수가 없다. 이 경우엔 어떻게 해야할까? 이러한 경우를 위해서는 android:button 이 아니라 android:drawableStart에 이미지를 넣어주어야한다. 기존의 button은 @null을 통해 제거한다. background와 체크박스 이미지 사이의 공간은 paddingStart를 통해 조절..
스크롤뷰는 참 편리하지만 가끔씩 원하는 로직의 구현이 어려울 때가 있다. 대표적 예중에 하나가 스크롤뷰 내부에 뷰를 하단에 고정하는 것이다. 다음과 같은 뷰가 있다고 가정해보자. 여기서 요구사항은 '고객센터' 라는 버튼을 최하단에 고정시키기 이다. 각 안드로이드 폰마다 해상도가 다르기 때문에 정확한 방법을 알지 않고는 구현하기가 어렵다. 예를들어서 고객센터를 제외한 부분을 스크롤뷰로 잡고 상위 레이아웃을 Relative Layout으로 잡게되면, 언뜻 성공한것처럼 보이지만 키보드가 올라온 경우 다음과 같은 슬픈 결말을 맞이하게 된다. 우리의 정확한 요구사항은 다음과 같다. 1. 스크롤뷰의 내부가 내용물이 적을 경우에도 하단뷰는 하단에 고정. 2. 스크롤뷰가 스크롤을 넘칠정도로 내용물이 생길 경우에는 하단..