일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Sticky Header RecyclerView
- 스레드 vs 코루틴
- power menu
- BOJ
- 안드로이드 무한 스크롤
- runCatching
- Android Compose Navigation
- 코틀린 에러 핸들링
- android compose orbit
- 코루틴 공식문서
- 안드로이드 컴포즈
- AAC ViewModel
- 백준 2615
- hilt
- Hilt 에러
- RecyclerView Sticky Header
- android orbit
- power menu 라이브러리
- 힐트
- Android Custom View
- 백준
- 코루틴
- 코루틴 공식 문서
- Thread vs Coroutine
- 안드로이드 커스텀 뷰
- viewmodel
- Coroutine
- Kotlin Serialization
- Android Compose
- Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException
- Today
- Total
목록Android (32)
Beeeam

오늘은 코드랩를 진행하면서 공부하였다. 코드랩은 밑의 링크에서 진행해 볼 수 있다. https://developer.android.com/codelabs/jetpack-compose-basics?hl=ko#1 Jetpack Compose 기초 | Android Developers 이 Codelab에서는 Compose의 기본사항을 알아봅니다. developer.android.com 몇 가지 빼고는 다 앞에서 공부 했던 것들이라서 복습하는 느낌이 많이 들었다. 기본적으로 컴포즈로 프로젝트를 생성하면 다음과 같은 형식의 코드를 볼 수 있다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {..

Row/Column 이용하여 레이아웃 구성 @Composable fun TextCell(text: String, modifier: Modifier = Modifier) { val cellModifier = Modifier .padding(4.dp) .size(100.dp, 100.dp) .border(width = 4.dp, color = Color.Black) Text( text = text, cellModifier.then(modifier), fontSize = 70.sp, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center ) } Row, Column을 통한 레이아웃 정렬을 위의 컴포저블을 통해서 확인할 예정이니 먼저 선언해놓는다. Row Row..

컴포저블 함수 컴포즈로 사용자 인터페이스를 만들 때 사용하는 특수한 코틀린 함수이다. @composable 애너테이션을 붙여서 선언한다. 컴포저블 함수에서는 일반 코틀린 함수를 호출할 수 있지만 일반 코틀린 함수에서는 컴포저블 함수를 호출하는 것이 불가능하다. 상태 컴포저블, 비상태 컴포저블 함수로 구분된다. 여기서 상태는 앱 실행 중에 변경될 수 있는 모든 값들을 의미한다. ex) 텍스트 필드에 입력된 문자열, 슬라이더의 위치 값, 체크 박스의 현재 설정 상태 등등… 상태 컴포즈 같은 선언형 언어에서 “상태”는 시간에 따라 변경될 수 있는 값을 의미한다. 우리가 일반적으로 사용하는 표준 변수와 다를게 없다고 생각할 수 있지만 2가지 차이점이 있다. 컴포저블 함수의 상태 변수는 “기억”되어야 한다. 함수..

기존의 xml을 이용하여 레이아웃을 구성하던 방식과 달리 xml을 사용하지 않기 때문에 프로젝트 내에 없다. 대신 레이아웃을 구성하는 코드는 @Composable 애너테이션이 붙은 “컴포저블 함수”로 구현한다. class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ComposePracticeTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background, ) { DemoText("Android",..
이번 프로젝트에서 피드 부분을 담당하게 되서 RecyclerView를 많이 다뤘다. 덕분에 이전보다 RecyclerView를 사용하는게 익숙해지긴 했지만 아직도 어렵게 느껴진다. 프로젝트의 안드로이드 파트 멘토 형이 했던 말이 생각난다. RecyclerView는 금쪽이다. 이 말에 100% 공감한다. 얘는 잘 구현했다고 생각하여 테스트 해도 이상하게 동작한다. 근데 어느 부분이 문제인지도 찾기 힘들다. 본인이 RecyclerView의 동작 원리 및 기초적인 것들을 잘 모르기 때문이라는 생각도 든다. 그래서 RecyclerView의 기초와 프로젝트를 진행하면서 RecyclerView에 대해서 알게 되었던 부분들을 정리하고자 한다. 왜 사용하는 거임? 먼저 이 친구를 왜 사용하는 지를 알아야 할 것 같다. ..
CountDownTimer 객체를 사용하면 안드로이드 프로젝트에서 타이머를 쉽게 구현할 수 있다. binding.btnTimer.setOnClickListener { val timer = object : CountDownTimer(10000L, 1000L) { override fun onTick(p0: Long) { Log.d("Timer", "1초마다 호출") } override fun onFinish() { Log.d("Timer", "타이머 종료!!") } } timer.start() } 본인은 CountDownTimer 객체를 사용하여 버튼이 클릭되면 1초마다 특정 로그를 찍는 타이머를 만들어봤다. 먼저 CountDownTimer 객체를 만들면서 인자로 실행할 시간, 호출 주기를 전달한다. 이 둘..
개발자가 자신이 배포한 앱에 대해서 사용자들과 소통할 수 있는 방법은 많이 없다. Play Store에서 댓글로 소통하거나 email을 주고 받아야 한다. 앱 안에 문의하기 기능을 넣어 바로 개발자에게 Email을 보낼 수 있으면 참 편리할 것이다. 그럼 간단하게 앱에서 정해진 email 주소로 메일을 보낼 수 있는 방법을 알아보자. Intent를 사용하면 간단하게 구현 가능하다. layoutMoreContact.setOnClickListener { val email = Intent(Intent.ACTION_SEND) val receiverEmail = "abc@example.com" email.data = Uri.parse("mail to:") email.type = "text/plain" email...
무한 스크롤 Recycler view를 사용하면 여러 개의 데이터를 효율적으로 화면에 보여줄 수 있다. Recycler view를 사용하려면 adapter에 데이터를 전달해야 한다. 만약 보여주고자 하는 데이터의 개수가 적으면 이를 한번에 모두 전달하면 된다. 근데 만약 전달할 데이터가 100개, 1000개이면 이를 한 번에 전달하는 것은 비효율적이다. 그래서 이를 recycler view의 최하단에 도달하는 경우에 추가로 전달 받는 방법을 사용하면 좋다. 이러한 방법을 무한 스크롤이라고 부른다. 무한 스크롤을 구현하는 것을 생각하면 간단하다. recycler view 최하단 도달? → 데이터 추가 위의 방식으로 구현을 할 것이고 추가로 맨 마지막 아이템에 progress bar를 추가하여 데이터를 불러..