kotlin

안드로이드/이론

[ 안드로이드 ] Fragment에서 onBackPressed(뒤로가기 이벤트) 처리하기

Fragment 위에 또 다른 화면을 띄워야 했다. 새로 띄울 화면은 배경이 반투명으로, 기존의 화면이 비쳐 보여야했기 때문에 새로운 Fragment를 띄우는 것이 아닌 View로 덮어 씌우는 방식을 선택 했다. 이런 식으로 구현하니 뒤로가기 처리가 문제가 되었는데, onBackPressedDispatcher를 이용해서 간단히 해결할 수 있었다. onBackPressedCallback 정의 private val onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // 특정 뷰가 보일 떈 직접처리 if(bind.clSelectAssessment.isVisible){ hideSele..

BOJ

[ 백준 26876 ] - New Time (Kotlin)

26876번: New Time Nikolay has a digital clock that displays time in 24-hour format, showing two integers: hours (from $00$ to $23$) and minutes (from $00$ to $59$). For example, the clock can show 00:00, 18:42, or 23:59. The clock has two buttons that can be used for manual www.acmicpc.net 문제 이해 & 기본 개념 잘못된 시간과 정확한 시간이 주어지고, 1분씩 증가하는 A버튼, 1시간씩 증가하는 B버튼이 있다. 버튼을 최소 횟수로 눌러서 정확한 시간에 맞추는 문제 중요 포인트 시간..

안드로이드/이론

[ 안드로이드 ] RecyclerView - StaggeredLayoutManager 아이템 위치에 따라 여백 설정하기

RecyclerView StaggeredLayoutManager RecyclerView의 LayoutManager를 StaggeredLayoutManager로 아래 사진과 같은 레이아웃이 그려진다. 사진과 같이 Height에 따라 빈 공간을 채우게 되는데, 주의할 점은 인덱스가 채워지는 순서로 매겨진다는 것이다. 일반적인 Grid 레이아웃의 인덱스와는 다른 형태인 것을 볼 수 있다. ItemDecorator를 이용하여 RecyclerView 아이템에 여백을 설정할 때, 인덱스로 위치를 구분하곤 하는데, StaggeredLayoutManager에선 인덱스로 위치를 구분하긴 힘들기 때문에 조금 다른 방법을 사용해야한다. 아이템 위치 구분하기 위의 사진과 같이 아이템 끼리의 간격을 동일하게 지정해주려면, 각 ..

안드로이드/이론

[ 안드로이드 ] WebView 동영상 전체화면 처리 ( + 상단바 숨기기)

WebView 동영상 전체화면 안드로이드의 WebView에선 기본적으로 동영상 전체화면 처리를 해주지 않는다. 따라서, 별도로 커스텀을 해야하며 전체화면 버튼 클릭 시 새로운 화면을 위에 덮어 씌운다고 생각하면 된다. WebChromeClient 클래스를 상속 받아서 커스텀해야하고, onShowCustomView, onHideCustomView 메소드를 통해 전체화면 처리를 할 수 있다. FullScreenHolder 생성 동영상이 올라갈 배경을 지정한다. 이 클래스를 지정하지 않으면 동영상을 제외한 여백 부분이 투명하게 처리된다. private class FullScreenHolder(context:Context): FrameLayout(context) { init { setBackgroundColor..

BOJ

[ 백준 2473 ] - 세 용액 (Kotlin)

2473번: 세 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 www.acmicpc.net 먼저 풀어보면 좋을 문제 2467번: 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 - www.acmicpc.net 문제 이해 & 기본 개념 세 용액의 합이 최소가 되는 경우를 구하는 문제 용액(2467번) 문제에서 하나의 용액이 더 추가 되었다. 용액(2467번) 문제는 투 포인터..

안드로이드/이론

[ 안드로이드 ] 클릭 가능한 모든 뷰에 반투명 효과 넣기

졸업 작품 앱을 만들던 중 뷰를 클릭했을 때 반투명 효과를 적용하고 싶었다. 단, 클릭 가능한 모든 뷰에 자동으로 적용하고 싶었다. 일일이 xml에서 지정해주는게 아닌 자동으로 할 방법이 없을까를 생각하다가 이 글을 작성하게 되었다. 해당 글에선 TouchListener를 Override 하여 모든 뷰에 클릭 효과를 넣는 방법을 소개한다. TransparentTouchListener.kt 생성 뷰를 클릭했을 때 반투명 효과를 주기 위해 아래와 같이 OnTouchListener를 재정의한다. class TransparentTouchListener( private val onTouchChanged: ((View, MotionEvent) -> Unit)? = null ) : View.OnTouchListene..

안드로이드/이론

[ 안드로이드 ] Retrofit2를 이용하여 서버와 통신하기 (1) - 안전하게 통신하기 (SafeApiCall)

안드로이드에서 Retrofit2으로 서버와 통신하는 경우가 많은데, 에러 처리를 제대로 해주지 않아 앱이 강제 종료 되는 경우가 많다. 모든 에러를 다 처리해줄 수도 없고, 서버에서 어떤 문제가 발생할 지도 모르기 때문에 Retrofit 요청을 안전하게 보내는 방법을 작성하고자 한다. Response를 위한 공통 클래스 작성 안전한 통신을 위해 몇 가지 필요한 작업이 있다. Parcelize 일단 기본적으로 서버에서 받은 응답을 직렬화하기 위해서 Parcelable를 사용한다. @Parcelize는 @Serialize와 비슷한데, 직렬화를 가능하게 해주는 인터페이스인 Parcelable을 구현해주는 어노테이션이다. (Parcelize 설정 방법) 더보기 build.gradle (앱 수준) plugins ..

안드로이드/에러 해결

[ 안드로이드 ] StateFlow 동일한 값 방출(emit)하기

문제 상황 MVVM + 클린 아키텍쳐 형태로 블루투스 기능을 구현하던 도중 StateFlow에 관한 문제가 발생했다. 블루투스 장치가 새로 검색 되어도 StateFlow에서 값이 발행되지 않아 화면에 장치 리스트가 표시 되지 않았다. 처음 한 번만 발행되고 그 이후엔 발행이 안되었는데, 그 이유를 적어보고자 한다. 일단 State 패턴을 이용하여 UI의 State를 관리하는 방식을 사용하고 있는데, Bluetooth 검색 화면의 State 클래스가 아래와 같이 작성 되어 있었다. sealed class BluetoothSearchFragmentState { object Init : BluetoothSearchFragmentState() /.../ data class IsScanning( val scanR..

dongx._.2
'kotlin' 태그의 글 목록 (2 Page)