본문 바로가기
반응형

전체 글407

Parcelable 을 사용해 데이터를 전달해 보자 안드로이드에서 Intent를 통해서 Activity로 data를 전달할 때, String이나 int같은 기본형이 아니고, 객체로 전달해야 할 때가 있습니다. 이때 Java에서 제공하는 Serializable을 implement하면 ,객체를 직렬화해주고, 다시 복원할 수 있게 해주구요. putExtra()에 인자로 넣어서 넘겨주기만 하면되니,구현해야할 메소드도 없어, 사용하기도 편리합니다. 참고로 아래링크에서 Serializable에 대해서 볼 수 있습니다.(Activity로 Object넘겨줄 때엔 Serializable) 그런데, 한가지 방법이 더 있습니다.바로 Parcelable이라는 interface를 사용하는 것입니다.구현하기는 좀더 복잡하기는 하지만,Java에서 재공해주는 Serializable보.. 2017. 3. 13.
안드로이드에서 카톡방식의 ViewPager + Tab 레이아웃 구현 카카오톡 을 사용하시다보면 좌우로 화면을 넘겨서 탭을 이용할 수 있는데요, 예를 들면 친구탭에서 채팅탭으로 이동할때, 상단 탭을 누를수도 있지만, 옆으로 쓰윽 밀어도 되지요? 이런 방식의 레이아웃을 구현하는 것을 정리해보려고 합니다. 1. 구조분석 상단에 3개의 탭메뉴가 있고, 각 탭에 따라서, 3개의 페이지가 있는데요, 이 페이지들은 Fragment로 만들려고 합니다. 만들고자 하는 화면은 아래와 같습니다. 움직임을 보여드릴수는 없지만, 카톡처럼 좌우로 스와이핑되면서 탭간이동이 되는 화면입니다;;;. 2. 필요한 라이브러리 설정 오늘도 예외없이 라이브러리 설정 먼저하고 갑니다~. dependency에서 design이라고 검색하시면 맨위에 나오는 라이브러리를 선택해주세요. 이번에 사용하는 라이브러리는 d.. 2017. 3. 13.
AlarmManager 로 구현하는 안드로이드 알람 안드로이드에서 앱을 만들다 보면,Alarm기능을 구현해야 할 때가 있습니다. 본격적인 알람앱이 아니어도,유저가 원하는 시간에 어떠한 노티가 와야 하는경우가 있기 때문인데요. 오늘은 Alarm기능에 대해서 정리해 보겠습니다. 1. Alarm 기능의 구현 안드로이드에서 Alarm은, 안드로이드 시스템의 AlarmManager에게 알람기능을 부탁하여 실행되도록 하는데요.이 AlarmManager에게 어떤 receiver를 호출할지에 대한 intent를 가지고 있는 PendingIntent와 얼마나 delay 된 후 실행시킬지를 알려주어서 set을 해줍니다. Alarm이 set되면, 정해진 시간에 AlarmManager가 receiver에게 broadcast 해주고,receiver가 이를 받아서 service를.. 2017. 3. 13.
CompileSdkVersion, MinSdkVersion, TargetSdkVersion 그리고 BuildToolsVersion 안드로이드 작업을 하면서, 최신버전으로 라이브러리로 업데이트하는일이 많은데요. 특히나, 구글에서 제공해주는 design, recyclerview, cardview 같은 라이브러리를 추가해보면, 계속 최신버전으로 업데이트 되는데요. 그런데, 이상하게 build.gradle에 최신버전으로 위의 라이브러리들을 추가하면, 아래이미지와 같이 빨간줄이 있는 경우가 있습니다. 뭐가 문제지? 하고 줄이 간곳에 마우스를 올려보니 아래와 같이 나왔습니다. compileSdkVersion이 23인데, 제가 25버전의 라이브러리를 추가했다 이거죠. "음. 그럼, compileSdkVersion을 25로 올리면 되겠구나" 하는 생각이 들긴 하는데요. 그렇다면, compileSdkVersion이라고 하는 건 뭘까요? 1. com.. 2017. 3. 12.
ConstraintLayout 의 매력에 빠져보겠습니다 어느 순간부터 안드로이드 스튜디오를 업데이트 하고나서,프로젝트를 생성한 뒤에, MainActivity.xml을 열어보면,Root ViewGroup이 아래와 같이 ConstraintLayout으로 되어 있는 걸 볼 수 있습니다. 도대체 얼마나 매력적이기에, 구글에서 이것을 디폴트로 쓰라고 추천하는지 궁금해지는데요.오늘은 이 ConstraintLayout에 대해서 정리해 보면서, 그 매력에 빠져보겠습니다~. 1. ConstraintLayout Constraint의 한글뜻은 제한, 통제라는 뜻인데요.모순적이지만, 구글에서는 블로그에서 ViewGroup을 아주 파워풀하고, 유연한 툴이라고 소개하고 있습니다. 구체적으로는, 복잡한 UI들을 안에 겹겹히 쌓지 않고도,위치나 사이즈를 유연하게 적용시킬 수 있는 Vie.. 2017. 3. 10.
Realm 에서 Thread Error 없이 데이터 조회후 삭제하기 오늘은 Android Realm에서 데이터를 조회한 후에,그 데이터를 삭제하는 것에 대해서 정리를 해보고자 합니다.생각해보면 그리 어렵지 않은 일인데요. 하지만 Realm에서는 Thread에 대해서 민감하기 때문에,이 쉬운일이 조금 어렵게 보일때가 있습니다. 1. Realm과 Thread Realm은 어느 Thread에서나 조회 또는 write할 수 있는데요.하지만, 서로 다른 Thread에서 데이터를 수정할 수 있다는 애기는 아닙니다. 즉, A쓰레드에서 write하고, B쓰레드에서 Read할 수 있지만,A쓰레드에서 바로 데이터를 수정해서 Update할 수는 없습니다.그리고, B쓰레드에서 A쓰레드로 바로 데이터를 넘겨줄수도 없습니다.쓰레드에 대해, 조금은 까다로운 편입니다. 다른 thread에서 데이터를.. 2017. 3. 8.
Android 운영체제의 기본구조 및 Architecture 오늘은 안드로이드 운영체제의 기본구조에 대해서 정리해 보겠습니다.안드로이드를 공부하게 될때, 보통 초반에 스윽 보고 지나가게 되는 부분인데요.하나하나 짚어가면서 보겠습니다. 1. 안드로이드 기본구조 안드로이드의 기본구조에 대해서는 아래표를 보면 이해하기가 쉬운데요.크게 5개의 큰 레이어로 분리할 수 있습니다. 아래의 표와 같이, 가장 하단부터, Linux Kernel, Libraries, Android Runtime, Application FrameWork, Applications 으로 구성되어 있습니다. (출처 = Smieh - Anatomy Physiology of an Android) 1-1. Linux Kernel 레이어 안드로이드는 가장 하단에 Linux Kernel이 있기 때문에, 리눅스 기반.. 2017. 3. 8.
Java Wrapper 클래스 를 정리해 보자 안드로이드 프로그래밍을 하다보면,Wrapper Class를 사용하게 되는 경우가 많이 있습니다.HashMap이나 Generic, 혹은 ArrayList를 사용할 때 인데요. 오늘은 Java의 WrapperClass에 대해서 정리해보겠습니다. 1. Wrapper Class Java 개발을 할 때, 무심코 사용하던 Wrapper Class란 말은,사실은 기본형(Primitive) 타입을 Wrap해서 쓰는, Primitive Wrapper Class를 지칭한다고 볼 수 있습니다. 실제로 Wrapper Class는, Primitive Wrapper Class뿐만이 아니라, 어떤 Class를 Wrap(포장)해서 사용하는 Class를 가르키는 것 입니다.하지만, 이 글에서도, Wrapper Class를,자바의 Pr.. 2017. 3. 7.
CollapsingToolbarLayout 으로 구현한 닫혀지는 ActionBar 안드로이드 Material Design이 나오면서, 앱 디자인에 종종 등장하는 UI가 있는데요. 바로, CollapsingToolbarLayout입니다. 이 Layout은, 아래와 같이 닫혔다, 열렸다 하는 안드로이드의 ActionBar를 가르키는데요. 오늘은 이UI를 구현하는 것에 대해서, 정리해보겠습니다. 1. Design Library 준비 MaterialDesign의 대표적 레이아웃인 CollapsingToolbarLayout을 사용하기 위해서는, Google이 제공하는 DesignLibrary가 필요합니다. dependencies에 아래와 같이 추가하면 됩니다. 직접 build.gradle에 추가하고자 한다면, compile 'com.android.support:design:25.2.0' 를 추.. 2017. 3. 5.
안드로이드 ActionBar에 Menu 를 구현해보자 안드로이드 ActionBar 우측에,아이콘과 점3개로 구성된 UI를 통해 추가적인 메뉴들을 보여줄 수 있는데요.오늘은 이것의 구현 방법에 대해 정리해 보겠습니다. 실제로 만들 화면은 아래와 같은데요.우측 상단의 디스켓 아이콘과 점점점으로 된 아이콘이 저희가 만들어 볼 Action Button들이구요, 그 중 점점점으로 된것이 overflow menu Button입니다.  그럼 하나하나 구현해보도록 하겠습니다. 1. 메뉴 XML파일 생성먼저, 해야할 일은 xml을 만들고, menu화면을 정의하는 일인데요.res폴더에서 new> android resource file을 선택해줍니다.   menu_sample 로 file name을 정하고, ResourceType을 menu로 선택해줍니다.   2. XML파일.. 2017. 3. 2.
Realm 에서 Migration 하는 방법 RealmDB를 사용해서 안드로이드 앱을 만들다보면, Migration을 해야하는 경우가 생기는데요.특히 배포가 된 앱이라면 더욱 그렇습니다.오늘은 이 Migration작업에 대해서 정리해보도록 하겠습니다. 1. 데이터모델 Class 오늘 Migraion을 해볼 데이터 모델클래스는,그동안 많이 사용해 왔던 Student Class입니다.여기서 int타입의 StudentNumber를 추가해 보겠습니다. 아래와 같이 String인 StudentNumber를 넣어서 추가하였습니다. studentNumber는 필수요소여서, Required attribute을 추가하였습니다. 2. Migration Class생성 그러면, Migration을 정의할 Class를 생성해 보겠습니다.Migraion 클래스를 생성하면서.. 2017. 3. 1.
Realm Module 을 이용해서 멀티 Schema 활용하기 안드로이드 앱을 만들다보면, 미리 준비해 놓고Local DB파일에서, data를 읽어와서 유저에게 보여주는 경우도 있고,유저가 Favorite 해놓은 데이터들을 DB로 저장해야 하는 경우도 있습니다. 그렇다면, 미리 정의해서 앱내로 가져온 LocalDB파일의 Schema와유저의 Favorite정보를 저장하는 Schema두개가 생길수가 있는데요.특히나, LocalDB파일의 데이터가 업데이트를 통해서 다운로드해야 되는 경우라면, 특히 건드리지 않는 것이 좋겠지요. 이럴때, Realm에서는 각각 다른 Module을 사용해서,각각의 Schema를 만들고 수정할 수 있는데요.오늘은 그것에 관해서 정리해보겠습니다. 1. Realm Module 정의하기 Realm 모듈에 대해서 특별하게 기술하지 않는다면,defaul.. 2017. 2. 25.
RxAndroid :: Subscription 을 Unsubscribe 해서 Memory Leak을 막자 RxAndroid를 사용할 때 주의해야 할 부분 중에 하나는,적절한 시점에 unsubscribe해주지 않으면 메모리 leak으로 연결될수도 있다는 점인데요.오늘은 Subscription을 unsubcribe()하는 방법에 대해서 정리해 보도록 하겠습니다. 참고로 RxAndroid에 대한 기본적인 사항들은,아래링크에서 먼저 읽어주세요~.>>> RxAndroid 이해하기 Part1 RxAndroid의 Map 과 FlatMap 메소드를 알아보자 2017. 2. 22.
Android 에서 동적으로 View 추가하기 #LayoutInflater 안드로이드 앱을 만들다 보면, 동적으로 View를 추가해야 할 경우가 생기는 데요. 오늘은, 이럴 때 어떻게 해야하는지 정리해 보겠습니다. 1. LayoutInflater layout을 생성하는 것은 inflate한다고 하는데요. 참고로 inflate의 의미를 사전에서 찾아보면, 부풀리다라는 의미인데요. View를 정의한 XML이나 Java파일대로 View를 inflate한다고 생각하면 될 것 같습니다. inflate는 getLayoutInflater()를 이용해서 현재 context와 폰화면에 맞는, LayoutInflater객체를 생성해서 사용해야 하는데요. 아래와 같이 layoutInflater객체를 얻어옵니다. 이제 inflate()메소드로 view를 inflate해줘야 하는데요, 먼저 view로.. 2017. 2. 21.
Android에서 Java코드로 margin값 변경하기 Android에서 레이아웃을 잡을 때는 XML을 이용하는데요. 하지만, 경우에 따라서, 동적으로 프로그래밍된 값으로 element를 움직여줘야 할 때가 있습니다. 이 때는 동적으로 margin값을 잡아줘야 할텐데요. 오늘은 이것에 대해서 정리해 보도록 하겠습니다. 1. 기본 Layout 정의 아래와 같이 Text밑에 LinearView가 있고, 그 밑에 LinearLayout안에 ImageView와 TextView가 있는 구조를 만들어 보겠습니다. 위 XML은 아래와 같이 보입니다. 2. Java 코드 저희가 이동시킬 대상은 id가 img_test인 안드로이드아이콘을 소스로 가지고 있는, ImgView인데요. 이 뷰의 마진 값을 저장하려면 LayoutParams객체를 가져와서 수정해야 합니다. 이 Lay.. 2017. 2. 20.
Android 의 Location Class와 위도, 경도 이용한 거리 계산 Location을 기반으로 하는 앱을 만들경우에 좌표를 이용해서 주소도 얻어야 하지만,특정 지점과 내위치 간의 거리 등, 좌표간의 거리를 구해야 하는 경우가 생기는데요.오늘은 어떻게 하면 좌표값으로 거리를 구할 수 있는지 정리해 보려고 합니다. 1. A,B Location을 정의 가장 먼저 필요한 것은, 거리를 재보아야 할 각각의 Location 객체를 구하는 것인데요.Location 클래스를 이용해서 객체를 생성한 후에,set메소드를 이용해서, 위도와 경도를 설정해 줄 수 있습니다. 먼저 A와 B위치의 Location을 정해보겠습니다.(물론, 유저의 스마트폰에서의 위치를 얻어와서 특정 위치와의 거리를 구할 수도 있는데요, 내 위치 표시방법은 아래 링크에서 확인해 주세요.)>>> Google Map 에서.. 2017. 2. 19.
Activity 와 Fragment 의 lifecycle (생명주기) 안드로이드는 에서 Activity와 Fragment의 lifecycle(생명주기)에 맞추어 개발을 하는 것이 매우 중요한데요. 오늘은 Activity와 Fragment의 생명주기에 관해서 정리해보겠습니다. 1. Activity 생명주기 먼저, Activity에 대해서 정리해볼텐데요,아래 이미지를 보시면서 전체 흐름에 대해서 보고, 하나씩 정리해보도록 하겠습니다. 1-1. OnCreate () 액티비티가 Launch되고 나서, 최초에 실행될 때, 호출 됩니다. 액티비티에 필요한 리소스들을 여기서 초기화 해주는데요. Button이라든가 EditText를 예로 들 수 있겠습니다. 1-2. OnStart () 유저에게 액티비티가 보이도록 해주는데요. 이 단계는 매우 빠르게 끝나고, onResume() 상태로 들.. 2017. 2. 18.
RxJava (RxAndroid)의 Map 과 FlatMap 메소드를 알아보자 RxAndroid (RxJava)는 유저들이 다양한 상황에서 쓸 수 있는, 메소드들을 제공해주는데요.오늘은 그중에서도, Map과 flatMap() 메소드에 대해서 정리해보고자 합니다. 혹시 RxAndroid 가 무엇인지에 대해서, 간단히 보고싶으시다면,아래의 글을 읽어주세요~.>>> RxAndroid 이해하기 Part1 2017. 2. 17.