반응형

안드로이드 62

리스트뷰(List View) vs 리사이클러뷰(Recycler View)

안드로이드에서 목록을 표시하는 View로는 리스트뷰와 리사이클러뷰 두 가지가 있다. 이 글에선 두 View가 어떻게 다른지에 대해서 알아보도록 하자. 리스트뷰와 리사이클러뷰의 차이점 1. ViewHolder 가장 먼저, 리사이클러뷰는 ViewHolder패턴을 사용하는데 반해, 리스트뷰는 이를 사용하지 않는다는 점이 있다. 리스트뷰의 경우 목록에 있는 각 Item마다 이를 구성하는 View들을 findViewById을 통해 연결해주어야 하는데, 이는 상당히 무거운 작업이기 때문에 Item을 생성할 때마다 이런 작업을 하게 되면, 성능 저하가 일어나게 된다. 반면, 리사이클러뷰에선 ViewHolder패턴을 강제로 구현하여 위와 같은 문제점을 해결한다. ViewHolder패턴이란? 각 View를 보관하는 객체..

안드로이드 View에 외곽선(테두리) 추가하는 법

안드로이드에서 디자인을 위해 View에 테두리를 넣는 법에 대해 알아보도록 하자. 흔히 말하는 '야매'로 해결하려면 다른 View를 하나 생성하여 두께를 1dp, 2dp 등으로 설정하여 해결할 수도 있지만, 이 방법은 조금 비효율적일 것이다. 그래서 테두리를 설정하기 위해 xml파일을 하나 만들어 View의 background로 설정할 것이다. 먼저, drawable폴더에 view_border.xml파일을 하나 만들어주도록 하자. 위의 코드를 보면, stroke에서 테두리의 두께와 색상을 설정할 수 있다. 위에선 3dp로 두께를 설정했고, solid에서 배경색을 지정할 수 있다. View의 background로 지정하는 것이기 때문에 배경색을 맞춰서 잘 지정해주어야 한다. 그리고 item에서 방향마다 두..

안드로이드 리스트에 View붙이기 (Header, Footer)

이번 글에선 ListView의 상단 또는 하단에 다른 View를 부착하는 법에 대해서 알아보도록 하자. ListView는 목록을 보여주기 위해서 사용되는 View이며 이 리스트에 대한 특징, 제목 등을 표현하기 위해 상단에 붙이는 것을 Header, 리스트를 다루기 위해 버튼 등을 하단에 붙이는 것을 Footer라고 한다. Xml파일 작성 먼저, Header와 Footer에 사용할 View의 리소스 파일을 작성한다. 화면 구성은 아래와 같이 해보도록 하자. Header를 위한 Layout파일부터 추가해보도록 하자. 다음으로 Footer를 위한 Layout파일을 추가하자. 다음으로 MainActiviy Layout에 ListVIew를 하나 추가한다. LIstView에 Header, Footer추가 이제 M..

안드로이드 버튼 클릭 시 퍼지는 effct주기(Ripple Effect)

안드로이드에선 기본적으로 버튼을 추가하면 클릭 시 해당 부분부터 퍼지는 이펙트가 내장되어있다. 하지만 버튼에 색상을 넣기 위해 background를 설정하면 이러한 이펙트가 사라지게 된다. 그래서 이번 글에선 이러한 퍼지는 이펙트를 직접 custom하여 버튼에 추가하는 방법을 알아보자. 일단 res/drawable폴더에 원하는 이름의 xml파일을하나 생성한다. 여기선 btn_effect.xml이라는 파일을 생성하도록 하겠다. 위와 같이 추가하고, 이를 적용시킬 버튼에 background로 설정해주도록 한다. . . 생략 . . . . 생략 . . 위에선 검은 배경에 회색 이펙트를 주어서 잘 안보이는데, 직접 색을 바꿔서 해보는걸 추천한다.

Geocoder를 사용해 주소를 좌표로 변경하는 방법(안드로이드, Koltin)

안드로이드에서 위치를 사용해 무언가 작업을 하려고 할 때 좌표를 주소로 바꾸는 경우도 필요하지만, 반대로 주소를 좌표로 바꾸는 경우도 필요하다. 이번 글에선 후자의 작업을 Geocoder를 사용해서 해결하는 법을 알아보도록 하자. private fun searchAddress(address: String){ lateinit var list: MutableList try{ list = Geocoder(context).getFromLocationName(addr, 5) }catch(e: IOException){ e.printStackTrace() Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show() } if(list.size == 0){ Toast.mak..

GPS 튀는 현상 보정

졸업 프로젝트 진행하면서 GPS를 사용하는데 실제 테스트를 해보니 GPS위치가 튀어서 한번에 원래 자리에서 몇십미터씩 이동하는 경우가 있었다. 이런 경우를 해결하기 위한 방법을 생각해봤다. 먼저, 필자는 GPS위치를 구하기 위해 LocationManager의 GPS Provider를 사용한다. 그리고 이 GPS Provider에는 좌표값 외에 속도값도 존재하는데, 이 속도값을 사용하여 GPS 보정을 해준다. (속도값은 m/s로 계산된다) 방법은 다음과 같다. 1. 이전에 구한 GPS 위치를 저장해둔다. 2. 현재 GPS Provider에서 구한 속도값을 사용하여 이전 좌표에서 이동 가능한 최대 거리를 계산한다. 3. 현재 구한 좌표가 이 최대 거리를 넘어가서 측정되면 보정을 통해 이동 가능한 최대 거리로..

안드로이드 AudioManager로 볼륨 조절(Kotlin)

이번 글에선 안드로이드에서 AudioManager를 사용해 볼륨을 조절하는 법에 대해 알아보도록 하자. 권한 요청 해당 기능을 사용하기 위해선 방해금지 권한이 필요하다. android.permission.ACCESS_NOTIFICATION_POLICY 먼저, Manifest파일에 위와 같은 코드를 추가해주고 사용자에게 권한을 요청해야 하는데, 여기서 다른 권한들과 요청하는 방법이 조금 다르다. val notificationManager = this.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager if(Build.VERSION.SDK_INT >= 23){ if(!notificationManager.isNotificationPoli..

안드로이드 Geofence(지오펜스)

이번 글에서는 안드로이드의 Geofence를 사용하는법에 대해 알아보도록 하자. Geofence에서 fence는 담, 울타리 등을 의미하는데, 스마트폰의 GPS위치를 기반으로 장소와 범위를 지정하여 울타리를 만들고, 울타리 내에 들어가거나 나올때에 이벤트를 동작시키는 기능이다. Geofence는 BroadCastReceiver를 사용하여 백그라운드에서 동작한다. 때문에 앱을 실행중이지 않을 때에도 이벤트가 발생하면 정해진 동작을 수행한다. 이제 실제로 Geofence를 사용하는 법에 대해서 알아보도록 하자. Defendency Geofence를 등록하기 위해선 gradle파일에 의존성을 추가해주어야 한다. dependencies { ... implementation 'com.google.android.g..

안드로이드 데이터베이스 SQLite(Koltin)

많은 양의 데이터를 관리하려면 데이터베이스는 필수라고 할 수 있다. 데이터베이스에도 종류는 여러가지지만, 이 글에선 안드로이드에서 기본적으로 사용가능한 SQLite를 사용해보자. DB생성 가장 먼저 DBHelper.kt파일을 생성하여 아래와같이 작성해준다. class DBHelper( context: Context?, name: String?, factory: SQLiteDatabase.CursorFactory?, version: Int ): SQLiteOpenHelper(context, name, factory, version){ override fun onCreate(db: SQLiteDatabase) { var sql: String = "CREATE TABLE if not exists animals..

안드로이드 스피너(Spinner, Kotlin)

스피너는 위와 같이 여러 개의 값 중에 하나의 값을 선택할 수 있도록 하는 방법 중 하나이다. 스피너는 초기에 기본값으로 설정된 값을 표시하고 있으며, 클릭 시 드롭다운 메뉴를 표시하여 자신이 원하는 값을 선택할 수 있다. 스피너에 제공하는 값들은 SpinnerAdapter를 통해 제공되는데, 값들을 어떠한 자료 구조에서 가져오느냐에 따라 배열의 경우 ArrayAdapter, 데이터베이스 쿼리에서 가져오는 경우 CursorAdapter 등을 사용할 수 있다. 이번 글에서는 ArrayAdapter를 사용하여 배열 구조에서 값들을 가져와보도록 하자. XML 만들기 스피너에 사용할 값들이 사전에 결정된 경우에는 문자열 리소스 파일을 정의하여 사용할 수 있다. 토끼 곰 호랑이 사자 고양이 먼저, res/valu..

반응형