본문 바로가기

기리's Android 이야기63

[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.
[Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(2) feat. Hint 만들기 안녕하세요. 이번에는 Spinner 위젯에 간단하게 Hint를 넣은 방법에 대해서 알아보겠습니다. 이전에는 Activity가 onCreate 될때마다 자동적으로 연도는 2021년 월은 1월이 자동으로 선택되었습니다. 2021/01/30 - [Android/Material Design] - [Android/Kotlin] 안드로이드 Spinner 커스텀 해보기 (1) 즉, Array의 첫번째 아이템이 선택되고 있습니다. 이러한 액션을 막거나 또는 사용자에게 Hint 메시지를 줄 수 있는 방법을 소개해 드립니다. 완성된 모습은 아래와 같습니다. 첫번째 항목인 연도와 월을 클릭하면 아무런 반응이 없습니다. STEP01. Array 첫번째 항목에 Hint 값 추가하기 Array의 첫번째 요소에 연도와, 월을 추가.. 기리's Android 이야기 2021. 1. 30.
[Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(1) 안녕하세요. 오늘은 지난 시간에 이어서 간단하게 Spinner 위젯을 커스텀해보도록 하겠습니다. UI적으로 사용하기가 너무 밋밋하다가 생각된다면 커스텀을 해보는것을 추천드립니다. 완성된 모습은 아래와 같습니다. 저번에 시간에 이어서 연도와 월을 나타내는 스피너의 디자인을 변경했습니다. (참고로 Drop Down Menu는 아직 변경되지 않았습니다.) ArrayAdapter를 활용한 Spinner 구현 참고: https://android-dev.tistory.com/35 STEP01. Spinner Background 만들기 아래와같이 Spinner의 배경을 만들어 줍니다. layer-list는 아이템을 중첩시킬때 사용합니다. [bg_spinner_year.xml] [bg_spinner_month.xml].. 기리's Android 이야기 2021. 1. 30.
[Android Studio/Kotlin] 안드로이드 Live Template 사용하기 안녕하세요. 오늘은 안드로이드 스튜디오에서 Live Template 기능 대해서 알아보겠습니다. Live Template은 단축 키워드를 사용하여 Boilder Plate 코드를 쉽게 작성할 수 있게 도와주는 기능입니다. 간단한 사용예를 보여드리면 아래와 같습니다. Date 형식을 String 타입으로 변환하기 위해 아래와 같은 코드가 필요합니다. 이를 Live Template에 미리 등록해 놓으면 간단한 단축어로 편리하게 사용할 수 있습니다. 그럼 이제 Live Template을 추가하는 방법에 대해서 알아보겠습니다. STEP01. Settings > Edit > Code Style > LiveTemplate 이동 STEP02. Live Temple 등록하기 우측의 플러스 아이콘을 클릭하시면 아래와 같.. 기리's Android 이야기 2021. 1. 26.
[Android/Kotlin] 안드로이드 ArrayAdapter를 활용한 Spinner 구현 오늘은 Spinner 위젯을 사용해서 아이템 리스트를 구현하고 사용자 선택하도록 하는 방법을 알아보겠습니다. Drop Down Menu라고 해서 Spinner를 클릭하면 아래로 메뉴 목록이 나타나고, 아이템을 클릭하면 어떠한 이벤트가 발생하도록 할 수 있습니다. 사용자가 연도와 월을 선택할 수 있는 화면을 만들어 보겠습니다. 완성된 모습은 아래와 같습니다. STEP01. 기본 레이아웃 만들기 [activity_main.xml] STEP02. Spinner 값 만들기 레이아웃에 스피너를 포함했지만 아직 스피너에 아무 값도 들어 있지 않은 상태입니다. 스피너에 값을 넣기 위해서 문자열 배열이 필요합니다. 여기에는 다음 두가지 방법으로 문자열 배열을 만들어 보도록 하겠습니다. 1) string-array 활용.. 기리's Android 이야기 2021. 1. 25.
[Android/Kotlin] 안드로이드 뒤로가기 종료 방지하기 feat. onBackPressed() 뒤로가기 버튼을 눌렀을때 백스택이 없으면 앱이 종료됩니다. 하지만 사용자의 실수로 앱이 종료될 수 있기 때문에 일정 텀을 주는 것이 좋습니다. 그래서 "종료하시려면 뒤로가기 버튼을 한번 더 눌러주세요." 라는 토스트 메시지를 띄워주는 앱이 많습니다. 이러한 토스트 메시지를 띄워주는 방법에 대해서 알아보겠습니다. Step01. 변수선언 private var doubleBackToExit = false Step02. onBackPressed() override fun onBackPressed() { if (doubleBackToExit) { finishAffinity() } else { Toast.makeText(this, "종료하시려면 뒤로가기를 한번 더 눌러주세요.", Toast.LENGTH_SHORT).. 기리's Android 이야기 2021. 1. 23.
[Android/Kotlin] 안드로이드 Single Click 구현하기 feat. 두번 클릭 방지... 오늘은 안드로이드를 개발 할 때 두 번 클릭되는 경우 이를 해결하는 방법에 대해서 알아보겠습니다. 가끔 RecyclerView 아이템을 빠르게 두번 클릭하면 새로운 Activity가 두개 열리는 경우가 있습니다. 또는 버튼을 빠르게 두번 클릭하면 해당 액션이 두번 발생 하기도 합니다. 이를 해결하기 위해서는 클릭할때 시간 제한을 두어야 합니다. 먼저 아래와 같이 OnSingleClickListener 파일을 하나 만들어 줍니다. 처음 클릭시 lastClickTime 변수에 시간을 할당해주고, 두번째 클릭 시 interval 시간보다 그 텀이 짧을 때는 return을 시켜줍니다. [OnSingleClickListner.kt] class OnSingleClickListener( private var inte.. 기리's Android 이야기 2021. 1. 22.
[Android/Error] 안드로이드 Caused by: java.lang.NullPointerException: Missing required view with ID: ~~~~~ ViewBinding을 사용하는 중에 아래와 같은 에러가 발생했습니다. activity 레이아웃 파일에 include 레이아웃이 있었는데 ID가 달라서 발생했던 문제였습니다. 아래와 같이 Id를 iclude_drawer 같게 해주면 해결됩니다. [Activity Layout] [Include Layout] ... 기리's Android 이야기 2021. 1. 21.
[Android/Kotlin] 안드로이드 SharedPreferences 사용하기 이번 시간에는 SharedPreferences를 좀 더 효율적으로 사용하는 방법에 대해서 알아보겠습니다. 안드로이드 개발 시 SharedPrefereces를 활용하여 간단한 상태값을 저장하기도 합니다. 최초 로그인 여부, 현재 로그인 유저의 간단한 정보, 가장 최근에 선택했던 값 등 다양하게 활용할 수 있습니다. 아래예제는 회원정보를 저장하고 조회하는 모습입니다. [build.gradle/app] // Preference implementation 'androidx.preference:preference-ktx:1.1.1' [PreferenceHelper.kt] object PreferenceHelper { fun defaultPrefs(context: Context): SharedPreferences .. 기리's Android 이야기 2021. 1. 20.
[Android/Kotlin] 안드로이드 로또 당첨번호 조회하기(2) 오늘은 회차별 로또 당첨번호를 가져오는 방법에서 대해서 알아보겠습니다. 회차별 로또번호를 조회하기 위해서는 아래 URL를 사용하시면 하시면 됩니다. https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=946 검색결과 아래와 같이 json 형태로 받아 볼 수 있습니다. {"totSellamnt":99380178000,"returnValue":"success","drwNoDate":"2021-01-16","firstWinamnt":2157656182,"drwtNo6":40,"drwtNo4":30,"firstPrzwnerCo":11,"drwtNo5":34,"bnusNo":20,"firstAccumamnt":23734218002,"drwNo":9.. 기리's Android 이야기 2021. 1. 19.
[Android/Kotlin] 안드로이드 로또 번호 생성하기(1) 랜덤으로 로또 번호를 생성하는 방법입니다. 간단히 설명드리면 로또 번호를 담을 List를 하나 생성합니다. 번호를 랜덤으로 생성하고, List에 담기전에 똑같은 번호가 들어있는지 확인을 해줍니다. List에 담겨져 있다면 continue를 호출하여 반복문을 다시 시작합니다. 반대로 없으면 List에 담아줍니다. 6개 번호가 담겨질때까지 반복합니다. 마지막으로 번호순서대로 정렬하기 위해 sort()를 호출 합니다. [While 사용] fun main(args: Array) { val result = createRandomNumberList() for (i in result.indices) { println("i번째 숫자: ${result[i]}") } } fun createRandomNumberList().. 기리's Android 이야기 2021. 1. 17.
[앱소개/로또앱] 넘버원로또 소개 안드로이드를 공부하면서 개인 프로젝트를 여러개 만들어봤지만, 항상 출시까지는 생각을 안하고 있었습니다. (이런 허접한 앱을 플레이스토어에 남겨도 될까..??) 그래서 그런지 플레이스토어 업로드 하는것부터 그 다음 단계가 어려워 보였고 겁이 났습니다. 하지만 언젠가는 앱 개발자가 되어야 하니 그래도 앱 하나를 출시해 보기로 마음 먹었습니다. 그래서 탄생한 앱이 [넘버원로또]입니다. 플레이스토어에 올리고 운영하는 과정에서 그리고 생각하지 못했던 에러들이 발생했습니다. 갑자기 사용자에게도 미안해지는 감정... 개발도 어려운데 디자인도 해야하니 쉽지 않았고, 마케팅은 또 어떻게 해야 할 지 아직도 모르겠습니다. 그래도 시간은 흘러 오늘까지 왔네요. 처음에는 공부하는 겸 만들어봤지만 점점 더 키워보고 싶은 생각이.. 기리's Android 이야기 2021. 1. 17.
[Android/Java] 안드로이드 ViewPage2 무한 이미지 슬라이딩 구현하기 오늘은 ViewPager2를 이용해서 무한 이미지 슬라이딩을 구현해보도록 하겠습니다. 완성된 모습은 아래와 같습니다. Step01. build.gradle 추가하기 ViewPager2는 material Library에 추가되어 있으므로 material 라이브러리가 추가 되어 있어야합니다. 추가적으로 이미지로딩을 위해 Glide Library를 추가해줍니다. implementation 'com.google.android.material:material:1.2.1' // Glide implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' Step02. .. 기리's Android 이야기 2021. 1. 15.
[Android Studio] 프로젝트/패키지명 변경하기 안드로이드 스튜디오를 통해서 작업을 하다보면 갑자기 프로젝트명을 바꿔야 할 때가 있습니다. 기본세팅인 example에서 작업을 하다가 막상 플레이 스토어야 올려야 할때면 수정을 해줘야 합니다. 이번에는 안드로이드 프로젝트명을 변경하는 방법에 대해서 말씀드리겠습니다. Step01. 디렉토리명 변경 프로젝트 네비게이션 바에서 설정버튼을 누르면 Compat Middle Package 메뉴가 보입니다. 현재는 선택 상태로 패키지명을 기준으로 폴더가 구조화 되어 있습니다. 이를 해제 시켜줍니다. 디렉토리가 해제되면 아래와 같이 폴더 이름을 변경할 수 있습니다. 저는 example과 timertutorial 이 두 곳을 수정했습니다. Rename선택시 Warining이 나타나도 Rename Package 선택하여 .. 기리's Android 이야기 2021. 1. 14.
[Android/Kotlin] 안드로이드 ViewBinding 사용하기 feat. kotlin synthetics deprecated... 안드로이드를 처음 접하실 때 findViewById() 메소드를 사용하여 해당 View에 접근했습니다. 하지만 프로젝트가 커지면 이는 번거로운 작업이 되었고, 또는 NullPointerException의 주범이 되곤 했습니다. 이러한 문제점이 있었기에 이를 해결할 수 있는 버터나이프 등 다양한 라이브러리를 사용했습니다. 하지만 코틀린으로 안드로이드 개발 할 때는 kotlin synthetics 에서 자동으로 위젯을 연결해 주어 해당 라이브러리가 필요 없었습니다. 이제는 'android-kotlin-extensions' (kotlin synthetics, parcelize) 이 Deprecated 되어 최근 안프로이드 스튜디오 버젼에서는 프로젝트 생성시 사용할 수 없습니다. 그래서 이번에는 findView.. 기리's Android 이야기 2021. 1. 12.
[Android/Kotlin] 안드로이드 액티비티 전환 애니메이션 사용하기 시작하기안녕하세요. 기리기리 입니다. 오늘은 안드로이드 액티비티 전환 애니메이션에 대해서 알아볼게욤. 액티비티 이동시 전환 애니메이션을 사용하면 사용자에게 좀 더 시각적으로 어필할 수 있습니다. 이번에는 A -> B  그리고 B -> A 로 액티비티가 전환될 때 애니메이션을 적용해 보도록 하겠습니다. 적용한 모습은 아래와 같습니다. [Slide Left / Slide Right] & [Slide Up / Slide Left]   Anim 파일 만들기Res 폴더에 anim 폴더를 생성해 줍니다.   anim 폴더에 적용될 xml 파일을 생성해 줍니다.액티비티가 왼쪽에서 오른쪽으로 전환되는 애니메이션을 위해서 총 4개의 파일이 필요합니다.같은 방식으로 액티비티가 위에서 아래로 전환되는 애니메이션을 위해서 총.. 기리's Android 이야기 2021. 1. 12.
[Android/Kotlin] Firebase - FirebaseAuth 회원가입 하기 오늘은 Firebase를 활용해서 회원가입하는 방법에 대해서 알아보겠습니다. Firebase를 사용하면 쉽게 회원가입과 관리를 할 수 있는 장점이 있습니다. Firebase Authentication은 이메일 로그인, 구글 로그인, 전화 등 다양한 방법을 지원합니다. 회원가입 페이지에서 이메일과 패스워드를 입력하는 시나리오로 만들어 봤습니다. 완성된 모습은 아래와 같습니다. STEP01. Firebase Authentication 활성화 하기 Firebase Console에 접속해서 해당 프로젝트로 이동합니다. 먼저 Authentication 을 활성화 해줘야 합니다. Authentication 메뉴를 클릭 한 후 시작하기를 눌러줍니다. 시작하기를 누르면 아래와 같은 화면이 나타납니다. 두번째 탭의 Si.. 기리's Android 이야기 2020. 11. 11.
[Android/Kotlin] Firebase 프로젝트 연결하기 오늘은 Firebase를 연동하는 방법에 대해서 알아보겠습니다. 안드로이드 프로젝트와 파이어베이스를 연결하는 순서를 간단히 소개 드리면 아래와 같습니다. 1) Firebase Console에서 프로젝트 생성 2) google-services.json 파일 다운로드 후 안드로이드 app 폴더에 붙여넣기 3) Firebase SDK 추가 STEP01. Firebase 프로젝트 생성 https://console.firebase.google.com/ 로그인 - Google 계정 하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인 accounts.google.com 프로젝트 추가 버튼을 클릭합니다. 아래와 같이 프로젝트 만들기 화면이 나타나면 순서대로 진행해 줍니다. 프로젝트 생성이 완료되었습.. 기리's Android 이야기 2020. 11. 11.
[Kotlin] 코틀린 Scope Functions(let, apply, run, with, also) 알아보기 let, apply , run, with, also를 언제써야 할 지 헷갈리때가 많습니다. 코틀린을 더 코틀린 답게 쓰기 위해서 위 함수들의 사용법에 익숙해 져야 합니다. 그래서 오늘은 Scope Function 대해서 정리해 보겠습니다. Scope Function 을 구분하려면 아래 두가지 차이점을 알아야 합니다. 1. Context object를 참조하는방식: this 또는 it 2. Return value: context object 또는 lambda result 함수 참조 방식 리턴 값 with() this Unit apply() this context object also() it context object let() it lambda result run() this lambda result 그.. 기리's Android 이야기 2020. 11. 11.
[Android/Java] 안드로이드 ViewPager2 이미지 슬라이드 만들기 이미지 슬라이드는 온라인 쇼핑몰에서 고객에게 다양한 상품이미지를 보여줄때 흔히 사용됩니다. 이를 구현하기 위해 ViewPager2를 사용하도록 하겠습니다. 완성된 모습은 다음과 같습니다. Gradle 추가 ViewPager2를 사용하기 위해 Gradle에 아래와 같이 Dependency를 추가해줘야 합니다. 추가로 이미지 로딩을 위해 Glide 라이브러리를 추가했습니다. dependencies { // ViewPager2 implementation "androidx.viewpager2:viewpager2:1.0.0" // Glide implementation 'com.github.bumptech.glide:glide:4.9.0' annotationProcessor 'com.github.bumptech.g.. 기리's Android 이야기 2020. 11. 11.