본문 바로가기

Kotlin35

[Android/Kotlin] 안드로이드 구글맵 Google Map(2) - release 안녕하세요. 지난번에 이어서 release용 API Key를 생성하는 방법에 대해서 알아보겠습니다. 2021/02/08 - [Android] - [Android/Kotlin] 안드로이드 구글맵 Google Map 설정하기(1) - debug [Android/Kotlin] 안드로이드 구글맵 Google Map 설정하기(1) 안녕하세요. 오늘은 Google Map 사용법에 대해서 알아보겠습니다. 프로젝트를 생성하고, 구글 API키를 발급받아 설정하는 순으로 진행해 보겠습니다. 그리고 API키는 디버그 / 릴리즈 두가지가 있는 android-dev.tistory.com 아래는 Google Map 관련 API 키 가져오기 공식 설명내용입니다. developers.google.com/maps/documentati.. 기리's Android 이야기 2021. 2. 8.
[Android/Kotlin] 안드로이드 구글맵 Google Map 설정하기(1) - debug 안녕하세요. 오늘은 Google Map 사용법에 대해서 알아보겠습니다. 프로젝트를 생성하고, 구글 API키를 발급받아 설정하는 순으로 진행해 보겠습니다. 그리고 API키는 디버그 / 릴리즈 두가지가 있는데, 이번 시간에는 디버그용으로 설명드립니다. STEP01. GoogleMap 프로젝트 생성 아래 그림과 같이 Template을 Google Maps Activity를 선택하여 새로운 프로젝트를 생성합니다. 새로운 프로젝트가 생성되었습니다. 기존 Empth Activity 프로젝트 생성과 다르게 맵 설정과 관련된 일반적인 내용들이 프로젝트안에 생성되었습니다. [AndroidManifest 파일] ACCESS_FINE_LOCATION 퍼미션이 등록되었습니다. 그리고 meta-data 태그에 API_KEY 가.. 기리's Android 이야기 2021. 2. 8.
[Android/Kotlin] 안드로이드 Expandable RecyclerView 만들기 안녕하세요. 오늘은 Expandable이라고 불리는 확장가능한 RecyclerView에 대해서 알아보겠습니다. RecyclerView를 사용해서 목록을 보여줍니다. 목록안에 세부적인 정보를 숨기고 사용자가 특정 목록의 내용을 보고 싶을때만 열리고 닫히는게 하는것이 UI적으로도 보기 좋을때가 있습니다. 이러한 기능을 구현하는 방법에 대해서 알아보겠습니다. 크게 생각하면 아래 두가지를 구현한다고 생각하시면 됩니다. 1. RecyclerView 아이템 레이아웃에 상세 레이아웃 추가(클릭시 gone -> visible) 2. 화살표 버튼 Toggle 구현 완성된 모습은 아래와 같습니다. STEP01. build.gradle/app 추가 circleImageView 라이브러리를 추가합니다. 프로필 사진을 Circ.. 기리's Android 이야기 2021. 2. 8.
[Android/Kotlin] 안드로이드 ConstraintLayout(3) Guideline 안녕하세요. 지난번 Barrier에서 이어서 Guideline 기능에 대해서 알아보겠습니다. 2021/02/07 - [Android/Material Design] - [Android/Kotlin] 안드로이드 ConstraintLayout(1) Chain 2021/02/07 - [Android/Material Design] - [Android/Kotlin] 안드로이드 ConstraintLayout(2) Barrier 가이드라인은 디자인 작업을 하시는 분들에게 익숙한 개념입니다. 보통 안드로이드 디자인을 하는 툴인 Adobe XD 에서도 많이 사용하고 있습니다. 가이드라인을 생성하는 방법은 아래와 같습니다. 이러한 가이드 라인을 언제 사용하면 좋을까요? 안드로이드를 개발할 때 android:layout_ma.. 기리's Android 이야기 2021. 2. 7.
[Android/Kotlin] 안드로이드 ConstraintLayout(2) Barrier 안녕하세요. 지난번 ConstraintLayout Chain에 이어서 Barrier 기능에 대해서 알아보겠습니다. 2021/02/07 - [Android/Material Design] - [Android/Kotlin] 안드로이드 ConstraintLayout(1) Chain [Android/Kotlin] 안드로이드 ConstraintLayout(1) Chain 안녕하세요. 오늘은 ConstraintLayout의 기능중에 Chain에 대해서 알아보겠습니다. Chain은 사용 가능한 공간 내 뷰들간의 분할되는 방식을 제어할 수 있는 제약조건입니다 그리고 기존 레이아웃 중에 L android-dev.tistory.com Barrier 라는 영어단어는 '장벽'을 뜻하는 말로 뭔가 레이아웃에 벽을 만들어준다 라고.. 기리's Android 이야기 2021. 2. 7.
[Android/Kotlin] 안드로이드 ConstraintLayout(1) Chain 안녕하세요. 오늘은 ConstraintLayout의 기능중에 Chain에 대해서 알아보겠습니다. Chain은 사용 가능한 공간 내 뷰들간의 분할되는 방식을 제어할 수 있는 제약조건입니다 그리고 기존 레이아웃 중에 LinearLayout에서 사용하였던 weight 속성을 ConstrainrLayout에서도 사용할 수 있습니다. 그럼 만드는 방법에 대해서 설명드리겠습니다. STEP01. 체인 만들기 Chain은 여러 뷰들로 구성되어 있기때문에 Chain을 만들기 위해서 연결할 뷰들을 모두 선택해야 합니다. 아래와 같이 모든 TextView를 선택하고, 우클릭 Chain > Create Horizontal Chain을 선택하여 체인을 만들 수 있습니다. 체인을 생성하면 아래와 같이 뷰들의 관계 및 위치가 변화.. 기리's Android 이야기 2021. 2. 7.
[Android/Kotlin] 안드로이드 Gradient TextView 안녕하세요. 오늘은 TextView에 Gradient 효과를 주는 방법에 대해서 알아보겠습니다. 아래와 같이 글씨에 Gradient 효과가 들어갑니다. [LinearGradientSpan.kt] class LinearGradientSpan( private val containingText: String, private val textToStyle: String, @ColorInt private val startColorInt: Int, @ColorInt private val endColorInt: Int ) : CharacterStyle(), UpdateAppearance { override fun updateDrawState(tp: TextPaint?) { tp ?: return var leadingW.. 기리's Android 이야기 2021. 2. 7.
[Android/Kotlin] 안드로이드 ViewBinding with BaseActivity, BaseFragment 안녕하세요. 오늘은 BaseActivity 클래스와 BaseFragment 클래스를 사용하여 좀 더 편안하게 ViewBinding을 사용하는 방법에 대해서 알아보겠습니다. 액티비티와 프레그먼트가 많아질수록 ViewBinding을 초기 세팅하는 일도 만만치 않습니다. 초기 세팅을 Base 추상 클래스에서 구현하도록 하겠습니다. BaseActivity에서 구현하는 방법입니다. [BaseActivity.kt] abstract class BaseActivity( val bindingFactory: (LayoutInflater) -> B ): AppCompatActivity() { private var _binding: B? = null val binding get() = _binding!! override fu.. 기리's Android 이야기 2021. 2. 6.
[Android/Kotlin] 안드로이드 ViewPager2 인트로 화면 with Navigation Component 안녕하세요. 오늘은 ViewPager2를 사용하여 Intro 화면을 만드는 방법에 대해서 알아보겠습니다. 인트로 화면은 앱을 처음 실행할때 앱의 간단한 사용에 대해서 설명해주는 페이지입니다. 최초 실행시만 보여지고, 그 이후에는 사용자가 볼 수 없도록 구현해 보도록 하겠습니다. 완성된 모습은 아래와 같습니다. 인트로 화면을 구현하기 위해서 Navigation Component를 사용했습니다. 프로젝트의 전반적인 구조는 아래와 같습니다. 액티비티는 MainActivity 하나만 존재합니다. 메인 액티비티 안에서 Fragment 간의 상호작용이 발생하고, 이는 Navigation Component를 사용하여 구현할 예정입니다. SplashFragment 에서 Splash화면을 로딩해주고, 만약 최초 실행이라.. 기리's Android 이야기 2021. 2. 6.
[Android/Kotlin] 안드로이드 Notification(1) 안녕하세요. 오늘은 알림 이벤트인 Notification을 구현해 보도록 하겠습니다. 안드로이드 Notification은 아래 그림과 같이 제목, 메시지 그리고 아이콘 등이 표시됩니다. 구현하는 방법은 NotificationComapt.Builder 객체를 사용하여 알림 콘텐츠와 채널을 설정해야 합니다. setContentTitle() -> 제목 setContentText() -> 본문 setSmallIcon() -> 작은 아이콘 setPriority() -> 우선순위 설정 그리고 안드로이드 8.0 이상부터는 NotificationChannel 인스턴스를 createNotificationChannel()에 전달하여 등록해야합니다. 그리고 알림 메시지 클릭 이벤트 등을 처리하기 위해 PendingInten.. 기리's Android 이야기 2021. 2. 5.
[Android/Kotlin] 안드로이드 Room Database 사용하기(3) Migration 안녕하세요. 오늘은 Room Database를 사용하다가 Migration이 필요할 때 Migration 하는 방법에 대해서 알아보겠습니다. 테이블을 추가하거나 컬럼을 변경하는 경우에 유용하게 사용할 수 있습니다. 오늘 설명드릴 케이스는 expense_table에 새로운 컬럼을 추가하는 방법입니다. (지출 목록을 분류할 수 있는 category 컬럼 추가 예정) 지난 예제에 이어서 설명드리겠습니다. 2021/02/01 - [Android/AAC] - [Android/Kotlin] 안드로이드 Room Database 사용하기(2) Select... 2021/01/30 - [Android/AAC] - [Android/Kotlin] 안드로이드 Room Database 사용하기(1) 먼저 그냥 컬럼을 추가한다고.. 기리's Android 이야기 2021. 2. 5.
[Android/Error] 안드로이드 java.lang.IllegalStateException: An instance of OnFlingListener already set. 안녕하세요. 오늘은 RecyclerView에서 SnapHelper를 적용하는 도중에 아래와 같은 에러가 생겼습니다. java.lang.IllegalStateException: An instance of OnFlingListener already set. OnFlingListener 인스턴스가 이미 존재하는 에러라는데... OnFlingListener 리스너를 한번 찾아 봤는데 아래와 같은 설명이 있었습니다. This class defines the behavior of fling if the developer wishes to handle it. Subclasses of RecyclerView.OnFlingListener can be used to implement custom fling behavior.. 기리's Android 이야기 2021. 2. 4.
[Android/Kotlin] 안드로이드 FLAG_FULLSCREEN Deprecated... 안녕하세요. 오늘은 WindowManager.LayoutParams.FLAG_FULLSCREEN 코드가 Deprecated 되어서, 새로운 방법으로 구현하는 방법에 대해서 소개해 드립니다. API >= 30 이상 부터는 WindowInsetsController.hide()를 통해 구현하시면 됩니다. 아래는 예제 코드입니다. class SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.splash_activity) if (Build.VERSION.SDK_INT >= Build.VERSION.. 기리's Android 이야기 2021. 2. 4.
[Android/Error] 안드로이드 NullPointerException: WindowInsetsController... FullScreen 화면을 구현 하던 중 WindowManager.LayoutParams.FLAG_FULLSCREEN가 Deprecated 되어서, 아래와 같이 새로운 코드를 추가하던 중 에러가 발생했습니다. class SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.insetsController?.hide(WindowInsets.Type.statusBars()) } else { window.setFlags( Window.. 기리's Android 이야기 2021. 2. 4.
[Android/Kotlin] 안드로이드 Multi Selection RecyclerView 만들기 안녕하세요. 오늘은 RecyclerView로 여러 아이템을 선택하는 방법에 대해서 알아보겠습니다. 흔히 Multi Selection RecyclerView라고 말합니다. 리스트뷰에서 특정 아이템을 선택하여 따로 저장하거나 삭제하는 경우에 유용하게 쓸 수 있습니다. 오늘 보여드릴 시나리오는 아이템 목록에서 다중선택을 통하여 삭제하는 흐름 입니다. 처음 아이템이 선택되면 버튼이 활성화 되고 삭제하기 버튼을 클릭하면 선택 된 아이템의 갯수가 토스트 메시지로 표시가 됩니다. 완성된 모습은 아래와 같습니다. STEP01. 레이아웃 구성하기 레이아웃은 RecyclerView와 그 아래 삭제 버튼으로 구성했습니다. [activity_main.xml] STEP02. RecyclerView 구현하기 RecyclerVie.. 기리's Android 이야기 2021. 2. 2.
[Android/Kotlin] 안드로이드 TextInputLayout 사용해보기 안녕하세요. 오늘은 TextInputLayout에 사용법에 대해서 알아보겠습니다. TextInputLayout은 EditText를 기반으로 좀 더 유연한 동작을 보여주는 레이아웃입니다. TextInputEditText를 감싸고 있습니다. TextInputLayout을 사용하기 위해서는 Material Library가 추가되어 있어야합니다. implementation 'com.google.android.material:material:1.2.1' 기본적인 사용법은 아래와 같습니다. TextInputEditText에 Hint 값을 "이메일..."로 주었습니다. 아래와 같이 EditText에 포커스가 주어질때 Hint 값이 TextInputLayout의 라벨로 이동합니다. TextInputLayout 의 스타.. 기리's Android 이야기 2021. 2. 2.
[Android/Kotlin] 안드로이드 Room Database 사용하기(2) Select... 안녕하세요. 오늘 Room Databse를 활용해서 데이터를 가져오는 방법에 대해서 말씀드리겠습니다. 지난 시간에는 Room Database에 대한 설명과 간단하게 데이터를 입력하는 방법에 대해서 알아봤습니다. 2021/01/30 - [Android/AAC] - [Android/Kotlin] 안드로이드 Room Database 사용하기(1) 오늘은 입력한 데이터를 가져오도록 하겠습니다. 저장하기 버튼을 누르면 바로 아래 ReclclerView 목록에 가져오도록 합니다. 완성된 모습은 아래와 같습니다. 프로젝트 구조는 아래와 그림과 같습니다. STEP01. Resource 클래스 만들기 Resource 파일은 sealed class 입니다. sealed라는 말은 봉인된이라는 의미로 무언가를 봉인하고 있는 .. 기리's Android 이야기 2021. 2. 1.
[Android/Kotlin] 안드로이드 Section(Group) RecyclerView 만들기 안녕하세요. 오늘은 Section 또는 Group RecyclerView에 대해서 알아보겠습니다. 여기서 말하는 Section 또는 Group이라는 말은 대분류안에 소분류가 있다고 생각하시면 될 것 같습니다. 예를들어 데이터를 일단 날짜별로 일단 보여주고, 해당날짜에 상세 내역을 보여주는 용도로 보면 될 것 같습니다. 그래서 오늘은 아래와 같은 시나리오를 준비했습니다. 1. 그룹(고등학교, 대학교, 직장 등) 리스트 보여주기 2. 그룹 내 친구 리스트 보여주기 완성된 모습은 아래와 같습니다. STEOP01. 데이터 클래스 만들기 두가지 데이터 클래스가 존재합니다. 하나는 그룹별 친구리스트를 보여주는 SectionModel 클래스이고, 친구 정보를 담는 Friend 클래스를 만들어 줍니다. [Section.. 기리's Android 이야기 2021. 1. 31.
[Android/Kotlin] 안드로이드 Room Database 사용하기(1) 안녕하세요. Room Datebase를 사용하는 방법에 대해서 알아보도록 하겠습니다. 먼저 Room Database는 안드로이드에 내장된 SQLite를 통한 데이터베이스 사용에 도움을 주는 AAC 라이브러리입니다. Room은 SQLite에 대한 추상화 레이어를 제공하여 데이터베이스 사용을 쉽게 해줍니다. 여기서 말하는 데이터베이스는 Local 데이터베이스로, 사용자의 폰에 저장하는 형태입니다. 간단한 데이터를 처리하는 경우 쉽고 빠르게 처리할 수 있는 장점이 있습니다. Room은 아래와 같이 세가지 주요 구성요소가 있습니다. (공식문서) 1. Entity: 데이터베이스 내의 테이블을 나타냅니다. POJO클래스에 @Entity 어노테이션을 추가하여 생성합니다. 2. Dao: 데이터베이스에 액세스하는데 사용.. 기리's Android 이야기 2021. 1. 30.
[Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(3) feat. Drop Down Menu 2021/01/30 - [Android/Material Design] - [Android/Kotlin] 안드로이드 Spinner 커스텀 해보기 (1) 2021/01/30 - [Android/Material Design] - [Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(2) feat. Hint 만들기 안녕하세요. 이번시간에는 Spinner 위젯 사용시 Drop Down Menu도 커스텀 하는 방법에 대해서 알아보겠습니다. 커스텀 하기 이전에는 보통 텍스값을 많이 사용합니다. 이번에는 이미지와 텍스트값이 같이 나타나도록 해보겠습니다. 완성된 모습은 아래와 같습니다. 이전 Spinner 구현 코드에서 이어서 해보겠습니다. 필요하신 분들은 이전 블로그 글을 참고부탁드립니다. STEP01.. 기리's Android 이야기 2021. 1. 30.