지난 callbackFlow에 이어서 callback를 coroutine 형태로 받을 수 있는 suspendCoroutine과 suspendCancellableCoroutine에 대해 알아보려고 합니다. 1. suspendCoroutine public suspend inline fun suspendCoroutine( crossinline block: (Continuation) -> Unit): T { } 먼저 suspendCoroutine에 대해 알아보도록 하겠습니다. 내부 코드와 함께 적힌 설명을 살펴보면, block 람다 함수는 Continuation 객체를 인자로 받으며, 비동기 작업이 완료되면 결과를 이 Continutaion 객체를 통해 반환합니다. Continuation 객체는 현재 코루틴 상..
EditText를 이용할 때 입력 문자에 제한을 두어야 할 때가 있습니다. 한글만 입력이 가능하게 한거나, 특수문자 입력을 막거나 할 때 등등 보통 InputFilter를 사용하여 입력을 막도록 하는데요 최근에 개발하다가 Filter 조건을 잘 걸었지만 이상하게 동작하는 현상이 발견돼서 기록해보려고 합니다!!! 1. InputFilter EditText에서 InputFilter를 사용하여 특정 문자 입력을 제한, 문자열 길이 제한 조건 설정을 할 수 있습니다. fun EditText.filterDigitAndSpecialChar() { this.filters = arrayOf( InputFilter { source, start, end, dest, dstart, dend -> val pattern = "..
때론 디자인에 따라 Toast 위젯 디자인을 커스텀해야 하는 경우가 있습니다. 최근 사이드 프로젝트에서 Jetpack Compose로 Toast 위젯을 커스텀해야 하는 경우가 생겨 이번 기회에 알아보려고 합니다! 1. 기존에 사용한 Toast Message Custom //Toast 위젯 상속 class CustomToast(context: Context) : Toast(context) { } //객체 생성 Toast(context).apply { view = toastLayout setGravity(Gravity.CENTER,0,0) } 기존에는 Toast 위젯를 상속받는 Class를 통해 Customview를 생성하거나, 객체를 생성하여 setView(), setGravitiy() 등 다양한 속성값을..
검색이나 값을 사용자로부터 입력받아야 하는 경우 xml에서는 EditText를 사용해 왔습니다. Compose에서는 TextField라는 것을 사용합니다. TextField는 어떻게 커스텀할 수 있을까요? 1. TextField 먼저, TextField에 대해 간단히 알아보도록 하겠습니다. @Composable fun TextField( value: TextFieldValue, onValueChange: (TextFieldValue) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, readOnly: Boolean = false, textStyle: TextStyle = LocalTextStyle.current, label: @Compos..
안드로이드 개발을 하다보면 상황에 따라 화면 터치 여부를 파악하거나 이벤트를 추가해야하는 경우가 있는데요! onTouchEvent(), onClick 등 많이 사용해보았지만 내부 구조에까지는 알지 못했던 것 같아 뷰 계층 구조를 통해 터치 이벤트가 흐르는 방식에 대해 정리해보려고 합니다. 1. MotionEvent 간단하게 MotionEvent 종류에 대해 다시 한번 정리 해보도록 하겠습니다. ACTION_DOWN : 손가락 또는 물체가 화면에 처음 접촉할 때 발생하는 이벤트입니다. 이벤트에는 제스처의 초기 시작 위치가 포함됩니다. ACTION_UP : 손가락 또는 물체가 화면에서 떼어질 때 발생하는 이벤트입니다. 제스처의 최종 놓은 위치가 포함됩니다. ACTION_MOVE : ACTION_DOWN과 A..
Flow는 스스로 라이프사이클을 알지 못하기 때문에 CoroutineScope에 따라 생명주기에 따라 맞추어 사용하며 불필요한 메모리나 리소스가 낭비되지 않도록 하는 것이 중요합니다! 이번에는 LifecycleOwner.launchWhenStarted, Lifecycle.repeatOnLifecycle 등이 어떻게 다른지 알아보고 어떻게 불필요한 리소스 낭비를 방지해야 할지 알아보려고 합니다. lifecycleScope.launch private val _stateFlow = MutableStateFlow(0) val stateFlow get() = _stateFlow private fun testCount() { viewModelScope.launch(Dispatchers.IO) { repeat(10)..
대다수의 앱에서 로그인이나 중요한 인증이 필요한 경우 비밀번호가 아닌 얼굴 인식, 지문 인식 같은 생체 인식 인증을 요청하는 방법을 사용하는데요, 오늘은 안드로이드 프로젝트에 어떻게 적용하는지 공부해보려고 합니다! 어떤 라이브러리를 사용하고 어떻게 프로젝트에 적용하는지 알아보도록 하겠습니다. 어떤 라이브러리를 사용하는가? 안드로이드 생체 인식을 위한 라이브러리는 두 가지가 존재합니다. 바로 FingerPrintManager와 BiometricPrompt 입니다. - FingerPrintManager : API 레벨 23 ~27 - BiometricPrompt : API 레벨 28 이상 AndroidX 생체 인식 라이브러리를 사용하기 전에는 자체 인증 UI를 만들어야 했지만, AndroidX로 이전을 통해..
Kotlin에는 확장 함수(Extension Function)가 존재합니다. 확장 함수를 사용하면 여러 장단점이 존재하며 Android 개발을 할 때도 종종 사용되곤 합니다! 오늘은 확장 함수에 대해 정리해보도록 하겠습니다. 먼저 확장 함수가 무엇인지에 대해 알아보도록 하겠습니다. 확장 함수(Extension Function)이란? 코틀린은 클래스에 상속하거나 디자인 패턴을 사용하지 않고 새로운 기능으로 클래스를 확장할 수 있는 기능을 제공하는데 이것이 확장(extension)이라는 선언을 통해 이루어지게 됩니다. 이때 추가적인 메소드를 구현하면 이를 확장 함수 라고 하고 추가적인 프로퍼티를 구현하면 확장 프로퍼티라고 합니다. 마치 기본 클래스에 정의된 함수인 것처럼 새로운 기능을 추가하는 기능! 언제 ..
앱을 사용하다 보면 서버에서 데이터를 받아오는 과정에서 로딩 프로세스바나 리스트 모양이 반짝거리는 등의 효과를 볼 수 있습니다. 이러한 효과들은 사용자에게 데이터를 받아오는 중이라는 것을 명시할 수 있고, 로딩 애니메이션에는 스켈레톤 UI, 루프 애니메이션, 프로그래스 바 등 다양한 방법이 있습니다. 그중에서 오늘은 스켈레톤 로딩을 구현하는 방법에 대해 공부해보려고 합니다.! (Compose 또한 어떻게 적용하는지 궁금해서 xml과 Compose 모두 다뤄보려고 합니다.) XML 스켈레톤 UI를 구현하는 방법은 다양하지만, 가장 많이 사용되는 facebook에서 제공하는 라이브러리인 shimmer-android를 사용해보도록 하겠습니다. 우선 build.gradle에 라이브러리를 추가합니다. // Gra..
💁단일 데이터가 아닌 경우는 어떻게 할까요, 앞서 공부한 just()나 create()는 단일 데이터를 주로 다루어 보았는데요. 이번에는 단일 데이터가 아닐 경우에 어떻게 사용하는지 즉 fromXXX() 계열 함수에 대해 알아보도록 하겠습니다. fromArray() 함수 Integer[] arr = {100,200,300}; Observable source = Observable.fromArray(arr); source.subscribe(System.out::println); 🎈int [] 배열 사용하기 int[] 배열을 실제로 그대로 넣으면 올바른 실행결과가 나오지 않습니다. ⇒ toIntegerArray()를 사용해야 합니다. int[] intArray = {400,500,600}; Observabl..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.