본문 바로가기

안드로이드

(33)
Android - Bottom Dialog (BottomSheetDialogFragment) 앱을 사용하다보면, 특정 시점에 하단에서부터 Dialog가 보여지면서 정보를 제공하는 경우가 있다.(구글 맵, 네이버 지도 등) 이런 기능을 구현할 때 다양한 라이브러리들이 있고, 직접 애니메이션 구현을 통해 Dialog를 생성해도 되지만, 이런 방법보다 Google Material Design에서 제공하는 BottomSheetDialogFragment를 이용해 손쉽게 생성할 수 있다. 먼저 build.gradle(app)에 google material design을 dependency에 추가해준다. implementation 'com.google.android.material:material:1.1.0' 그 다음 BottomSheetDialogFragment를 상속받아 구현한다. class Bottom..
Android - Handler 정리 Handler는 Thread의 MessageQueue와 관련된 Message 및 Runnable 객체를 보내고 처리 할 수 있습니다. 각 Handler 인스턴스는 단일 Thread 및 해당 Thread의 MessageQueue와 연관됩니다. 새로운 Handler를 만들면 Looper에 바인딩됩니다. Message와 Runnable을 해당 Looper의 MessageQueue에 전달하고 해당 Looper의 Thread에서 실행합니다. Looper는 Thread에 전달된 Message의 실행을 관리하는 Queue이며, 입력이 없을 때 대기하고, 메세지를 전달받으면 해당 메세지를 연결된 Thread에서 처리하게끔 관리한다. Handler는 Message와 Runnable의 실행 시점을 관리한다. 다른 Thre..
Android - Parcelable 정리 Parcelable은 안드로이드에서 객체를 직렬화하는데 사용되는 인터페이스라고 이해하면 될 것 같다. 여기서 Java의 Serialization과 다른점은 Parcelable은 Reflection 구현 대신 직렬화에 대한 처리를 명시적으로 한다. 마셜링은 프로세스간 또는 스레드 간 데이터 전송에 필요한 원격 프로시저 호출(remote procedure call, RPC) 매커니즘의 구현에 사용된다. Parcelable은 아래의 경우에 사용된다. 1. IPC 통신 2. Intent로 컴포넌트간 데이터 전달 먼저 IPC 통신은 프로세스간의 데이터 전송을 의미하며, AIDL을 활용 시 원시타입이 아닌 참조타입을 전달할 경우 Parcelable 객체로 전달해야 한다. 구현은 Parcelable 인터페이스를 구현..
Expecting android:screenOrientation="unspecified" or "fullSensor" (LockedOrientationActivity) 해결 방법 최근 Android Studio를 3.6으로 버전 업하면서 기존에 작업한 소스의 AndroidManifest.xml의 android:screenOrientation="portrait" 설정에서 빨간줄이 생겼다.(물론 빌드배포에선 전혀 문제가 나지 않았다.) 내용은 아래 스크린샷과 같다. 요약하면, 현재 지정한 'portrait' 속성 대신에 'unspecified'나 'fullSensor' 사용을 권고하는 내용이였다. 해결 방법은 간단하다. ignore 속성에 "LockedOrientationActivity" 를 추가하면 된다. tools:ignore="LockedOrientationActivity" 참고링크: https://stackoverflow.com/questions/58519021/in-andr..
안드로이드 개발 - (9) PendingIntent의 활용 Intent는 메세징 객체이며, 다른 앱 구성요소(Activity, Service, Broadcast Receiver, Content Provider)에 작업(Action)을 요청하는데 사용한다(An Intent is a messaging object you can use to request an action from another app component). 간단한 예로, Activity에서 다른 Activity를 실행하거나, Service를 호출해 작업을 진행하는 등의 과정에서 Intent로 요청을 하는 것이다. Intent는 번들(Bundle)로 구성되는데 번들은 Parcelable을 구현한 데이터 객체라 생각하면 될 것 같다. 따라서 우리는 Intent에 전달하고 싶은 데이터를 담아서 다른 앱 구..
안드로이드 개발 - (8) View의 Listener 활용 - OnClickListener, OnLongClickListener 안드로이드에서의 이벤트 중 가장 간단한 OnClickListener에 대해 알아보고자 한다. OnClickListener는 뜻 그대로 View를 클릭했을 때 발생하는 이벤트이다. 우리는 앱과의 상호작용에서 버튼을 클릭하거나, 길게 누르거나 스크롤을 조작하는 등의 활동을 한다. 이 때 안드로이드에서는 해당 상호작용에 대한 이벤트를 Callback한다. 이벤트가 발생할 때 처리할 로직을 작성하는 부분이 바로 각 Listener들이다. 1. OnClickListener 먼저 간단한 OnClickListener에 대해 알아볼 것이다. 기능은 명칭 그대로 View를 클릭했을 때 작동하는 인터페이스로 대상 View에 리스너를 설정하여 사용이 가능하다. OnClickListener는 View에 정의된 인터페이스로 아..
안드로이드 개발 - (7) View, ViewGroup, Inflation의 개념 안드로이드는 View 클래스를 기반으로한 다양한 레이아웃 등 UI 인터페이스를 제공한다. 글자를 보여주는 TextView, 사용자 입력값(Soft Input)을 도와주는 EditText, 사진 등의 이미지를 제공하는 ImageView, 클릭하여 이벤트를 전달하는 Button, 선택 목록을 제공하는 Selector, 리스트를 제공하는 RecyclerView 등 다양한 View들이 있으며, 이러한 뷰들을 감싸는 컨테이너 역할인 ViewGroup이 있으며, 이를 Layout이라 표현한다. 따라서 우리는 UI를 구성할 때 필요한 View를 선택하고, 구성에 맞게 Layout으로 감싸야 하며, 이를 Activity에 Inflation해야 사용자에게 UI를 보여줄 수 있다. 여기서 Inflation은 간단히 말하면..
Android - Xml 파싱(XmlPullParser) Android에서 xml 파싱을 할 경우, Android Developer는 XmlPullParser를 사용할 것을 권장하고 있다. XmlPullParser를 객체를 생성하는 방법은 두 가지로, 두 메서드 모두 XmlPullParser를 반환한다. XmlPullParserFactory.newInstance().newPullParser() Xml.newPullParser() 파싱방법은 생각보다 간단한데, XmlPullParser객체에 Url에서 받은 InputStream 객체를 집어넣어 데이터를 가져온다. 자주 사용되는 메서드는 아래와 같다. setFeature() Returns the current value of the given feature. setInput() Sets the input strea..