목록코딩 일기장/Android(Kotlin) (102)
와챠의 우당탕탕 코딩 일기장
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sGeUj/btru6MeZBNv/NOo18xKL0h7DKdI27OnJK1/img.png)
유튜브에서 Kotlin 강좌(Code with Joyce)를 보고 있는데 마지막 강의에서 Navigation에 대한 내용을 다루시길래 재밌어 보여서 나도 같이 만들어보고자 한다. Navigation 궁금했음!! 더 잘 다르고 싶었음! https://developer.android.com/guide/navigation/navigation-getting-started?hl=ko 탐색 구성요소 시작하기 | Android 개발자 | Android Developers 탐색 구성요소 시작하기 이 주제는 탐색 구성요소를 설정하고 사용하는 방법을 설명합니다. 탐색 구성요소의 대략적인 개요는 탐색 개요를 참고하세요. 환경 설정참고: 탐색 구성요소는 Android developer.android.com 1. depende..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bdI4u6/btrurUdl1K8/8OppUDDGKeMGe305jk0Nfk/img.png)
아래 화면은 "동네 고영희" 앱 UI입니다^____^ 결과 화면 구현한 기능 갤러리에서 사진 선택(사진 선택 시 최대 선택 개수 지정) 사진 재선택 시 이전에 선택한 사진 보이기 갤러리에서 사진 선택 시 확대된 사진 보이기 선택된 사진 개수 실시간으로 보이기 1. 라이브러리 gradle에 추가 사진 개수 제한을 위한 fishbun과 이미지 로드를 위한 gilde 라이브러리를 다운받아준다. 최신 버전 확인: https://github.com/sangcomz/FishBun dependencies { implementation 'io.github.sangcomz:fishbun:1.0.0-beta01' // limit photo count implementation 'com.github.bumptech.glid..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bykyVM/btrupHLoLBF/gdfU2Z7SebC0DeMP9NwkFk/img.png)
아래 화면은 "동네 고영희" 앱 UI 입니다! 결과 화면 기존 다이얼로그를 사용해도 되겠지만 폰트 변경 과정이 번거롭고/dp 간격 조정을 자유롭게 하기 위해 커스텀하기로 결정!! 방법: CustomDialog.kt 생성 custom_dialog.xml 생성 Dialog 띄우기 1. CustomDialog.kt 생성 import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/AlfOT/btrtHCxJKzs/VhIzvCusb5Ppls7WCw2nXK/img.gif)
아래 화면은 '동네 고영희' 앱 UI입니다!!! 결과 화면 스피너(TextView임) 클릭하면 아래에서 다이얼로그(BottomSheetDialog)가 나옴 아이템 선택 시 선택한 아이템으로 스피너(TextView) text 변경 아래로 드래그 시 다이얼로그 내려감(기본 기능임) 클릭 효과 적용 만들어보자~~~ 요약: spinner 처럼 생긴 TextView 만들기 res>drawable>spinner_bottom.xml 생성:레이아웃 맨 위의 오른쪽, 왼쪽 모서리를 둥글게 하기 위함 res>layout>spinner_custom_layout.xml 생성: BottomSheetDialog Layout 만들기 res>values>themes>themes.xml에 아래 style 추가: 뒷배경 투명 처리 1번..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bRTFhL/btrtB8vYOX1/mQByyqTbr0a763WunjEoHK/img.png)
아래 화면은 '동네 고영희' 앱 UI입니다!!! 결과 화면 스피너 밑줄 만들기: 아래 코드를 xml에서 spinner에 추가해주면 됨 style="@style/Widget.AppCompat.Spinner.Underlined" 스피너에 힌트 만들기: 1, 배열의 맨 마지막에 hint를 넣고 2, 스피너 아이템의 갯수에서 -1을 리턴하게 한 후에 3, hint를 스피너의 초기값으로 지정해주면 된다. 그러면 위의 사진과 같이 마지막 아이템이 hint처럼 보이게 된다. 1, res>values>spinner_array.xml에 스피너 배열 추가! 이때 hint도 배열의 맨 마지막에 넣어주어야 한다. 1살 미만 2살 3살 4살 5살 이상 모름 고양이 나이 선택 2, 스피너의 아이템 갯수가 -1이 되도록 설정한다...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dA30EO/btrsNybE8Z8/IPiMCTHs78tKvKN7kPKKS0/img.png)
let with run apply also 0. 기본 기본적인 객체 생성 방법은 아래와 같다. // 사람 데이터 클래스 data class Person(var name: String, var age: Int) // 객체 생성 val person = Person("", 0) person.name = "minWachya" person.age = 23 // 출력 println("$person")// Person(name=minWachya, age=23) 1. let fun T.let(block: (T) -> R): R 자신(it)을 받아서 어떤 값을 반환함. let 블럭 안에는 non-null 값만 가능 // 객체 생성 val person = Person("", 0) // 경우 1: 자기 자신 반환 val r..
코루틴이란? 루틴의 일종인 협동루틴(co + routine)으로, 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴이다. 하나의 스레드 안에 여러개의 코루틴이 동시에 실행될 수 있는데, 이 때 하나의 스레드가 끝날 때까지 계속되는 것과 달리 코루틴은 실행 중간에 다른 작업을 하러 갔다가 돌아와서 다시 작업을 할 수 있다. 루틴? 루틴: 프로그램의 일부로서, 특정한 일을 실행하기 위한 일련의 명령 메인 루틴: 프로그램 전체의 개괄적인 동작 절차를 표시 서브 루틴: 반복되는 특정 기능의 묶음 함수가 함수 안에 있을 때 안쪽의 함수를 지칭 코루틴은 어떨 때 쓰이는가? 네트워크 리퀘스트(Retrofit...) 내부 DB 접근(SQLite...) 등등 백그라운드 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAvVGu/btrseQWJCmP/YxNMYm4Mrhqh1sHKMhn6VK/img.png)
갤러리에서 사진을 가져와 ImageView에 넣는 작업을 하고 있는데, 어떤 사진들이 회전되는 문제가 종종 있었다. Camera 폴더에서 가져오는 사진이 주로 그런 것 같다. 사진을 찍을 때 카메라 회전 정보가 사진에 저장되어 있는 것이다. 예전엔 어떻게 해결할지 잘 몰랐는데 다시 구글링해보니까 그 방법이 은근히 쉬운 거다??? 그래서 좀 당황........ 암튼 갤러리에서 사진 선택하는 부분부터 소개를 하겠다... 1, 갤러리에서 사진 선택하기 버튼 누르면 갤러리에서 사진 선택하도록 했다. binding.btnSelectImage.setOnClickListener { // 갤러리에서 사진 선택해서 가져오기 val intent = Intent("android.intent.action.GET_CONTENT..