목록코딩 일기장 (205)
와챠의 우당탕탕 코딩 일기장
아래 화면은 "동네 고영희" 앱 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...
아래 화면은 '동네 고영희' 앱 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번..
아래 화면은 '동네 고영희' 앱 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이 되도록 설정한다...
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...) 등등 백그라운드 ..
갤러리에서 사진을 가져와 ImageView에 넣는 작업을 하고 있는데, 어떤 사진들이 회전되는 문제가 종종 있었다. Camera 폴더에서 가져오는 사진이 주로 그런 것 같다. 사진을 찍을 때 카메라 회전 정보가 사진에 저장되어 있는 것이다. 예전엔 어떻게 해결할지 잘 몰랐는데 다시 구글링해보니까 그 방법이 은근히 쉬운 거다??? 그래서 좀 당황........ 암튼 갤러리에서 사진 선택하는 부분부터 소개를 하겠다... 1, 갤러리에서 사진 선택하기 버튼 누르면 갤러리에서 사진 선택하도록 했다. binding.btnSelectImage.setOnClickListener { // 갤러리에서 사진 선택해서 가져오기 val intent = Intent("android.intent.action.GET_CONTENT..
내가 Spinner 설정하는 방법 걍 정리 공식 문서 https://developer.android.com/guide/topics/ui/controls/spinner?hl=ko 방법1 xml에서 배열 추가 1, xml에 spinner 추가 2, res>values에 배열 파일 추가 1분 5분 10분 20분 30분 40분 50분 1시간 3, 코드 작성 binding.spinnerSelectTime.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onNothingSelected(p0: AdapterView?) {} override fun onItemSelected(parent: AdapterView?, vi..
앱 시작 시간 공식 문서(링크) 스플래시 공식 문서(링크) Android12부터 SplashScreen API가 추가 되었다길래 이에 대해 자세히 공부해보려고 한다. 이 스플래시 화면 작동 방식은 콜드 스사트나 웜 스타트 시 앱이 준비가 될 때까지 스플래시 화면을 보여주는 것이다. 핫 스타트 중에는 스플래시가 작동하지 않는다. (쉽게 말하면 앱이 준비할 게 좀 있을 땐 스플래시를 보여주고, 준비가 다 된 상태면 스플래시를 안 보여준다는 것이다.) 그렇다면 콜드, 웜, 핫 스타트란 무엇일까? 잠깐 알아가보자!!(공식 문서) 앱은 아래의 3가지 상태 중 하나에서 시작한다. 콜드 스타트 핫 스타트 웜 스타트 콜드 스타트 앱이 처음부터 시작한다. 시스템과 앱이 다른 시작 상태보다 더 많은 작업 실행되므로 => ..