Android
![[Compose] Navigation](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FUugne%2FbtrMqtBk2nY%2FAAAAAAAAAAAAAAAAAAAAALmkP55SCy4SMzqdo8R_0uPcwpJff5sPvx7_uxbSIt85%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DZMo6F1oA3ZOFMPxshCW7a4sEl24%253D)
[Compose] Navigation
프로젝트를 진행하면서 Navigation기능을 많이 사용하였다. 프래그먼트간의 이동을 더욱 편리하게하고, safe Args특성을 사용하여 데이터 전달을 더욱 안전하게 할 수 있기 때문이다. 컴포즈에서도 네비게이션을 사용하여 뷰를 옮길 수 있으며 데이터도 전달할 수 있다. 두 번째 화면의 이동은 아무런 조건 없이 가능하고, 세 번째 화면의 이동은 해당 textField에서 입력한 값이 있어야만 가능하고, 이동했을 때의 세 번째 화면에서는 해당 textfield에 있던 값을 띄워보자! gradle파일에 navigation compose 라이브러리를 작성하자. implementation 'androidx.navigation:navigation-compose:2.4.0-alpha10' setContent { v..
![[Compose] TextField, Scaffold, SnackBar](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Foi4RZ%2FbtrMtFnINeb%2FAAAAAAAAAAAAAAAAAAAAAOWSaSNG69ZUQOl6zZu34LIKZAZRQ1_mpv1U8znCauzL%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Djkt5KYY5DORkxk5O%252Bwv2yJy9YBs%253D)
[Compose] TextField, Scaffold, SnackBar
이 글에서는 TextField를 만들어, 현재 입력하고 있는 값에서 버튼을 누르면 입력했던 값이 SnackBar형태로 나오는 간단한 프로그램을 짜보자. Scaffold( scaffoldState = scaffoldState //스낵바를 활용하기위해 ) { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ){ TextField( // value = textValue.value, //비어있으면 입력이 안됨(값이 변하지 않기 때문에) // onValueChange = { // textValue.value = it /..
![[JETPACK개론] Navigation](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdYSyq6%2FbtrLOgqi0ol%2FAAAAAAAAAAAAAAAAAAAAAALQ_Fd0kfLSON1Ojpm3O7p5mLtQXQ3VP2-0jiE6ok2-%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DpswIyk2xTMpDICr7kyMynwcuEAE%253D)
[JETPACK개론] Navigation
여태까지 진행했던 프로젝트에서 꼭 빠짐없이 Navigation을 도입하였다. 왜냐하면 프래그먼트간의 이동을 쉽게할 수 있고, 데이터전달을 기존의 방식보다 안전하게 할 수 있기 때문이다. 전에 트러버 프로젝트에서 Bottom Navigation과 Jetpack Navigation을 연결하면서 쓴 글이 있다. [Android] JetPack Navigation으로 Bottom Navigation 설정하기 안드로이드를 공부하면서 간단한 화면 전환은 intent로 구현했었다. 하지만 레이아웃이 복잡해질수록 코드가 길어지며 가독성이 떨어지는 문제점을 확인할 수 있었다. 이 경우를 해결하기 위해 J ssongcode.tistory.com 기존에 썼던 글이 있지만, 이번에 한번 더 정리하면서 Navigation을 왜..
![[JETPACK개론] WorkManager(5) + 주기적작업, 고유작업](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbv1aB9%2FbtrLK1r35bj%2FAAAAAAAAAAAAAAAAAAAAAGn6h6lwn7ZnshqjI1xixjwHN6Efo5TmyX4qeVxMqKuA%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dx3kN1sTqRfW1jGrHb6Tndfs7oCg%253D)
[JETPACK개론] WorkManager(5) + 주기적작업, 고유작업
주기적작업 경우에 따라 앱에서 특정 작업을 주기적으로 실행해야 할 수 있다. 예를 들어 주기적으로 데이터를 백업하거나 최신 컨텐츠를 앱에 다운로드 하거나 로그를 서버에 업로드해야 할 수 있다. 이 때 주기적으로 실행되는 WorkManager를 만들 수 있다. class WorkManager1(context : Context, workerParameters: WorkerParameters) : Worker(context, workerParameters){ override fun doWork(): Result { Log.d("WorkManager1", "doWork") val format = SimpleDateFormat("hh:mm:ss") val currentTime = format.format(Date..
![[Compose] Image, Card, State](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb7xRIN%2FbtrL5QSMffk%2FAAAAAAAAAAAAAAAAAAAAAMU5j4MDopkKpcjG9fO8NeieKUA83GDRzwlKLN4rOTIi%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3D2RM2rUYgROJzfzN3ecP8sHE1VG4%253D)
[Compose] Image, Card, State
Compose 전 글에서 포스팅 했던 내용중에 Box태그가 있었다. 이번 글에서는 위와 같은 뷰를 카드 뷰 안에 Box태그를 두개 넣어 image와 하트 아이콘을 넣어보자! setContent { var isFavorite by rememberSaveable{ //remember가 기억을 해주는 형태 mutableStateOf(false) } //이미지 카드를 여러 개 사용하고, 재사용할 수 있음 ImageCard( modifier = Modifier .fillMaxWidth(0.5f) .padding(16.dp), isFavorite = isFavorite ){ favorite -> isFavorite = favorite //값을 갱신함 } } @Composable fun ImageCard( modif..