본문 바로가기

Android

(6)
[Android] NestedScrollView 내부에 RecyclerView를 사용했을 때 스크롤이 제대로 안되는 문제 발견한 문제 NestedScrollView안에 RecyclerView를 두면 스크롤이 안되는 문제가 있습니다. 저는 RecyclerView를 Horizontal로 사용했습니다. 이렇게 사용하면 RecyclerView는 가로로 스크롤되고, 세로로 스크롤하면 NestedScrollView가 움직여야합니다. 하지만 실제로는 가로로 스크롤은 잘 되지만, 세로로 하는 스크롤이 안먹습니다. 해결방법 RecyclerView에 아래 속성을 추가합니다. android:nestedScrollingEnabled="false"
[Android] Handler Deprecated 문제 Handler자체가 deprecated된 것은 아닙니다. Handler의 생성자인 Handler()가 deprecated되었습니다. 암시적으로 Looper가 결정되는 Handler() 생성자는 사용할 경우 문제가 생길 여지가 있다고 합니다. 일부 작업이 유실될 수 있는 버그 Looper가 없는 쓰레드에서 생성될 경우 에러(crash) Race condition 따라서 다른 생성자 Handler(Looper)를 사용해서 명시적으로 Looper를 선택해서 Handler를 생성해야합니다. Handler(Looper.getMainLooper()) 이런 방식으로 만들면 됩니다. 이 방법으로 Handler를 만들었다고 해서 위에서 언급했던 문제들이 완벽하게 해결되는 것은 아닙니다. 하지만 Looper를 명시적으로 ..
[Android] Activity Lifecycle Activity는 사용자나 시스템의 요청에 따라 다양한 상태로 전환될 수 있습니다. 앱을 실행하는 도중에 잠깐 다른 앱으로 이동, 다른 Activity로 이동, 앱을 종료하는 등의 전환이 발생했을 때 Activity에서 이를 알아차리고 적절한 처리를 하도록 콜백을 구현할 수 있습니다. Android 공식 문서에서는 Lifecycle 콜백을 통해 아래 문제를 해결할 수 있다고 예시를 들어 설명합니다. 사용자가 앱을 사용하는 도중에 전화가 걸려오거나 다른 앱으로 전환할 때 비정상 종료되는 문제 사용자가 앱을 활발하게 사용하지 않는 경우 귀중한 시스템 리소스가 소비되는 문제 사용자가 앱에서 나갔다가 나중에 돌아왔을 때 사용자의 진행 상태가 저장되지 않는 문제 화면이 가로 방향과 세로 방향 간에 회전할 경우, ..
[Android] Chronometer Chronometer는 타이머 기능이 포함된 TextView입니다. 이 뷰를 쓰면 간단하게 시각적인 타이머 기능을 넣을 수 있습니다. Base 이 View에는 base라는 속성이 있습니다. base는 언제를 기준으로 타이머를 셀 것인지 정합니다. 단위는 milliseconds입니다. 그리고 chronometer는 base부터~ 기기를 부팅한 뒤로 몇 milliseconds가 지났는지 까지를 기준으로 타이머를 카운팅합니다. 예를 들어 기기를 부팅한지 10000 ms가 지났다고 해봅시다. base는 1000ms로 설정했습니다. 그러면 타이머는 9000ms로 계산되고, 00:09가 표시됩니다. 여기서 1초가 지나면 00:10으로 표시됩니다. 기기 부팅후 몇 ms가 지났는지는 어떻게 알지? SystemClock..
[Android] 크기 단위 (DP, SP, PX, ...) 안드로이드는 많은 기기에서 사용되고 있습니다. 스마트폰, TV, 테블릿, 등... 정말 다양한 기기에서 사용하는 만큼 화면 크기도 제각각입니다. 안드로이드는 이 문제를 해결하기 위해 화면 크기 별 자동으로 사이즈를 변환해주는 크기 단위를 도입합니다. 이 크기 단위에 대해서 언급하기 전에 몇 가지 필요한 지식들을 먼저 보고 가겠습니다. DPI 1인치당 픽셀(점 dots)이 몇 개 들어가는지 표현하는 픽셀 밀도 단위(dots per inch)입니다. 100dpi는 1인치에 100개의 픽셀이 있다는 의미입니다. DPI가 크면 클 수록 더 촘촘하게 픽셀이 구성되어있다는 의미입니다. 그래서 같은 100px이더라도 DPI에 따라서 크기가 다르게 보일 것입니다. 화면 밀도 크기 분류 안드로이드에서는 화면 밀도 사이즈..
[Android] 이벤트 처리 이벤트 처리는 사용자와 상호작용하기 위해 반드시 필요합니다. 모든 GUI Framework가 그렇듯이 안드로이드에서도 고유의 이벤트 처리 방법을 제공합니다. 크게 두 가지 방식으로 이벤트를 처리할 수 있습니다. 이벤트 종류에 따라 두 방식중 하나를 선택해야합니다. 이벤트 콜백 함수를 오버라이딩해서 처리하기 처리 로직을 담은 이벤트 리스너 등록하기 이벤트 콜백 함수 오버라이딩 Activity나 View에서 직접 이벤트 콜백 함수를 오버라이딩하여 이벤트를 처리할 수 있습니다. TouchEvent와 KeyEvent 등이 있습니다. 앞으로 나올 이벤트들을 보면 모두 Boolean타입을 리턴하고 있습니다. 이 값의 의미는 이벤트를 소모(consume)했는지 여부를 나타냅니다. 만약 true로 설정하면 시스템이 이..