본문 바로가기
반응형

전체 글362

안드로이드 ActionBar에 Menu 를 구현해보자 안드로이드 우측 상단에 보면 아이콘과 점3개로 되어있는 아이콘이 있는 UI를 본적이 있으실 텐데요.오늘은 이것에 대해서 정리해 보도록 하겠습니다. 실제로 만들 화면은 아래와 같은데요.우측 상단의 디스켓 아이콘과 점점점으로 된 아이콘이 저희가 만들어 볼 Action Button들이구요, 그 중 점점점으로 된것이 overflow menu Button입니다. 그럼 하나하나 구현해보도록 하겠습니다. 1. 메뉴 XML파일 생성 먼저, 해야할 일은 xml을 만들고, menu화면을 정의하는 일인데요.res폴더에서 new> android resource file을 선택해줍니다. menu_sample 로 file name을 정하고, ResourceType을 menu로 선택해줍니다. 2. XML파일 생성 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.
Manifest 에서 Activity 속성 Android 최근 사용합 앱에서 제외시키기 특정 액티비티 실행후에 유저가 우측하단의 'ㅁ'키를 누르면, 최근 사용한 앱들이 나오는 데요.아래의 이미지와 같습니다. 그런데, 이 화면에 최근실행된 액티비티가 나오지 않아야 하는 경우도 있습니다.나오지 않아야 한다는 것은, 유저가 다시 실행시키지 않도록 해야한다는 것인데요.액티비티의 실행 조건이 있어서, 단순히 Back해서 돌아가지는 않도록 해야하는 경우겠네요.보통 Service를 실행시켜서 동작시키는 Activity의 경우가 많을 것 같구요. 그렇다면, 이 설정은 어떻게 하는 것일까요?두가지 방법이 있는데요,Manifest에서 선언을 해주거나, Intent에 Flag를 달아주는 것입니다. 하나하나 보면서 정리해 보겠습니다. 2017. 2. 13.
Java Map인 HashMap, TreeMap, LinkedHashMap 에 대해서 정리해 보자. 안드로이드 프로그래밍을 하면서 Map을 사용하게 되는 경우가 종종 있는데요.Java 에서 제공해주는 Map에는 HashMap, TreeMap, LinkedHashMap 이 있는데요.이들에 대해서 한번 정리해보겠습니다. 1. HashMap HashMap의 소스코드는 길어서 다 볼수는 없지만, 간단한 주석이 들어있는 앞부분을 참조해보겠습니다.눈이 띄는 부분들을 정리해보면 다음과 같네요.인자로, null값이 허용되는 key,value값을 로 허용한다.해쉬맵의 순서는 정해져있지 않으므로, 정해진 순서대로 iterate을 하고 싶다면, LinkedHashMap을 사용할 것여러 워커 쓰레드를 사용하는 경우, 자동으로 동기화되지 않으므로, synchronized를 해야할 필요가 있다.Serializable을 사용하므.. 2017. 2. 12.
안드로이드 에서 Shake (흔들림) 감지 하기 안드로이드에서 사용자가 shake하는 모션을 감지해내야 할때는 어떻게 해야할까요?오늘은 안드로이드 시스템에서 제공해주는, SensorManager를 이용해서 Shake를 감지하는 방법에 대해서 정리해보겠습니다. 1. SensorManager 얻어오기 Context.getSystemService() 를 통해서 SensorManger객체를 얻어올 수 있는데요.얻어오는 것 뿐만이아니라, 사용하지 않을 때, disable하는 것은 매우 중요합니다.이 Manager를 사용하는 것이 Battery를 소모시키기 때문입니다. 먼저, SensorManger를 얻어오겠습니다. 다음으로, 사용자의 움직임을 Listening할 수 있도록, SensorEventListener를 implement해줄깨요.구현해야할 메소드들이 나.. 2017. 2. 7.
Android에서 MediaPlayer 로 음악 재생하기 앱을 만들면서 소리를 재생하도록 해야하는 경우가 상당히 많은데요. 이럴때 사용하는 MedaiPlayer 클래스에 대해서 정리해보겠습니다. MediaPlayer는 사실 오디오뿐만이 아니라, 이미지, 비디오 파일과 스트림을 플레이할수 있는 다재다능한 Class 인데요. 앱의 리소스를 저장하는 raw나 Assets폴더에 저장해놓고 사용하거나, 특정위치에 파일을 생성해서 음악을 재생할 수도 있구요, 외부 URL을 통해서 스트리밍을 재생할수도 있습니다. 지원하는 media format은 아래 링크에서 확인하실수 있습니다. (mp3나 img파일들, h.264타입의 비디오도 포함되어 있네요.) >>> 미디어 포맷 링크 2017. 2. 4.
bundle 객체로 보낸 데이터를 onActivityResult 로 받아오기 안드로이드 앱개발을 하면서,액티비티간에 데이터를 주고받는 경우가 있는데요. 보통은, intent객체를 생성해서 putExtra()메소드의 인자로 데이터를 실어서 보낸다음, startActivity 메소드에 intent객체를 인자로 주어서, 액티비티간에 데이터를 주고 받았는데요. 이번에는 startActivityForResult를 이용해서 데이터를 주고받는 경우에 대해서 정리해보겠습니다.이 경우는 요청했던 액티비티가 종료되는 시점에, 어떤 데이터를 받아오고 싶을때 사용하는데요. 예를들면, 설정화면인 Activity_A가 알람소리를 선택하도록 Activity_B를 요청하고,알람소리의 리스트화면인 Activity_B에서 선택된 아이템의 종류를 선택하고 확인버튼을 누르면,그 값을 Activity_A에게 다시 전.. 2017. 1. 24.
안드로이드 Custom Toolbar 와 Theme 적용하기 오늘은 안드로이드 앱의 상단 헤더부분에 대해,custom하게 디자인하는 방법을 알아보겠습니다. 이 헤더 부분에 대해서 Android에서는 ActionBar라는 이름으로 제공되고 있는데요.이 ActionBar라는 것이 버전별로 다른 이름으로 다르게 제공되고 있어서 버전 호환 문제가 있습니다.supportLibrary에서는 ToolBar 라는 이름으로, 헤더 부분을 제공해주고 있는데요.보통은 이 ToolBar를 이용해야, 호환성 문제가 없기 때문에 ToolBar를 디폴트로 사용하게 됩니다. 기본적으로 제공하는 Toolbar(혹은 ActionBar)의 디자인만 이용해도 무리가 없지만,좀더 커스터한 디자인을 사용하는 앱을 만들려고 할때,어떻게 해야하는지 정리해 보겠습니다~. 1. Theme 정의 먼저, 커스텀에.. 2017. 1. 23.
Java의 3항 연산자는 알아야, 소스코드도 보인다 안드로이드 소스코드를 보면, 가끔씩 3항 연산자를 볼 수 있는데요.오늘은 이 3항 연산자에 관해서 정리해보고자 합니다.우선 공식을 보면 다음과 같은데요. 조건문 ? true일때의 값 : false일때의 값 자주 사용하지는 않기는 하지만 경우에 따라서는 가독성도 좋아지고 코드도 짧아져서 좋습니다.실제 코드를 보면서 정리해 보겠습니다. 1. 쉬운 예 먼저 쉬운 예를 보도록 하겠습니다.조건: 여기서 조건문은 i>9 이 true인지 false인지 를 묻고있습니다.공식대로 보면 아래와 같은데요.true이면: "참",false이면: "거짓",을 result에 넣으라는 것입니다. 2. 안드로이드 소스코드 예 이번에는 안드로이드 소스코드에서 실제 사례를 하나 뽑아서 보겠습니다. getName()이라는 메소드를 사용하면.. 2017. 1. 21.
Checkable interface 로 selectable한(선택할 수 있는) RecyclerView 리스트 만들기 안드로이드 앱을 만들면서 설정UI를 만들다 보면,카톡의 알람음 선택UI처럼,리스트를 누르면 그 아이템이 선택되도록 해야하는 경우가 있습니다. 오늘은 그 때 구현해야하는 Checkable 인터페이스 를 사용하여, 커스텀 리스트를 만들어보도록 하겠습니다. 1. Checkable interface 우선, Checkable interface가 무엇인지, 소스코드를 먼저 보고 가겠습니다~.view를 checkable하게 만들기위해서 사용하는 거군요.그리고, setChecked, isChecked, toggle() 을 구현해야 되네요. 그럼 이제 실제로 코드에 적용해보면서, CustomList를 만들어 보겠습니다. 2017. 1. 20.
Fragment 에서 Activity 로 데이터 전달하기 안드로이드 앱을 개발하다보면,Fragment에서 Activity로 데이터를 보내는 일이 생기는데요.오늘은 이 방법에 대해서 정리해보겠습니다. 사실, 데이터를 보내는 방법은 다른 방법들이 있을 수 있겠지만,이 글에서는 interface를 이용해서 보내는 방법을 사용하도록 하겠습니다. 참고로, inteface에 관해 정리한 글은 아래링크에서 볼 수 있어요~.>>>> 안드로이드를 위한 자바 인터페이스 #다중상속 #콜백 2017. 1. 16.