728x90
전체 글

전체 글

    [Android] FlexboxLayout를 활용한 Chip EditText 만들기

    이번 프로젝트를 하며 EditText 앞에 Chip이 추가되는 방식의 화면을 구현해야 했다. 기존의 방식은 ChipGroup과 EditText를 사용해서 입력을 하면 ChipGroup에 추가되는 방식이었지만, 마지막 Chip 바로 옆에 입력창이 있었으면 했다. 이러한 방식으로는 도저히 생각나지 않아 다른 방법을 찾아본 결과 FlexboxLayout를 활용한 방법을 알게 되었다. FlexboxLayout은 웹에서 사용되던 CSS Flexible Box Layout Module을 안드로이드에 접목하여 개발한 라이브러리이다. 구글에서 만든 라이브러리인데 왜 이제야 알았을까. 뷰를 동적으로 추가해야 한다고 했을 때 자연스러운 모션을 보여줘야 한다면 FlexboxLayout이 좋은 선택지가 될 수 있다. Flex..

    [Kotlin] inline에 대하여 - inline, noinline, crossinline, reified

    inline 키워드에 대해서는 처음 코틀린을 공부할 때 보긴 봤었지만, 정확히 어떤 상황에서 사용하는지 알지 못했었다. 이번에 코틀린 확장 함수를 정리하다가 inline 키워드에 대하여 자세히 알게 되었고, 관련 내용을 기술하려고 한다. inline 키워드를 한마디로 설명한다면 다음과 같다. 고차 함수를 사용하면 런타임 패널티가 있기 때문에 함수 구현 자체를 코드에 넣음으로써 오버헤드를 없앨 수 있다. 이게 대체 무슨 말일까? 예시를 통해 좀 더 쉽게 알아보자. inline fun doSomething(action: () -> Unit) { action() } fun callFunc() { doSomething { println("문자열 출력!") } } 위와 같은 고차 함수가 있다고 하자. 이 코드를 ..

    [Kotlin] Kotlin의 Delegates 알아보기 - observable, vetoable

    디자인 패턴에서 Delegate Pattern이란 어떠한 기능을 자기 자신이 처리하지 않고 다른 객체에 일을 위임시켜 그 객체가 일을 처리하게끔 하는 것이다. Kotlin의 Delegates를 활용하면 여러 가지 일을 간단하게 처리할 수가 있다. 이 글에서는 Delegates의 observable과 vetoable를 활용하는 방법을 알아볼 것이다. observable과 vetoable을 사용하면 어떤 데이터의 값이 변경되었는지 쉽게 알아낼 수가 있다. 다시 말해, 옵저버 패턴을 쉽게 구현할 수가 있다. observable observable은 위에서 언급한 대로 프로퍼티를 observable 하게 만들어준다. 이것을 이용하면 프로퍼티의 데이터가 변할 때마다 callback을 받을 수 있다. public ..

    [Android] CollapsingToolbarLayout 응용하기 - Google Calendar App 클론 코딩

    이번 포스트에서는 CollapsingToolbarLayout을 응용하여 구글 캘린더 앱의 아래와 같은 효과를 따라 해 볼 것이다. 구현하고자 하는 기능은 위와 같이 월간 달력이 접히거나 펼치는 기능이 있고, 일간 화면을 스크롤하여 월간 달력을 접거나 펼칠 수 있다. 또한 월간 달력이 펼쳐진 상태에서는 일간 화면의 스크롤이 동작하지 않아야 하며, 접힌 상태에서는 동작이 되어야 한다. 전체적인 구조는 다음과 같다. AppBarLayout과 상호작용 하기 위한 NestedScrollView와 FrameLayout이 있다. FrameLayout 안의 Fragment에서 일간 화면을 그려준다. NestedScrollView와 FrameLayout 둘 다 AppBarLayout 접히거나 펼쳐지면 함께 움직여야 하기..

    [Android] ViewTreeObserver란? - View가 그려지는 시점 알아내기

    ViewTreeObserver란? Android Developers에서는 ViewTreeObserver를 다음과 같이 설명하고 있다. A view tree observer is used to register listeners that can be notified of global changes in the view tree. Such global events include, but are not limited to, layout of the whole tree, beginning of the drawing pass, touch mode change.... A ViewTreeObserver should never be instantiated by applications as it is provided by..

    [Android] ImageView에 색상 넣기 (ColorFilter vs Tint)

    안드로이드를 개발하다 보면 아이콘에 색깔을 넣는 경우가 많이 생긴다. 관련 키워드로 검색을 해보면 ColorFilter와 Tint와 관련해서 많은 자료가 나온다. 이번 포스팅에서는 실제로 내가 겪은 문제점을 공유하며 ColorFilter와 Tint의 차이점을 정리해보려고 한다. 내가 오늘 겪은 문제점은 ColorFilter로 값을 지정해줬음에도 색깔이 변경되지 않는 문제였다. 며칠 전에 발견했던 문제였는데 귀찮아서 제대로 찾아보지 않았다가 오늘 자료 조사를 통해 알게 되어서 포스팅을 하게 되었다. 예시를 통해 알아보자. 우선 간단한 이미지 리소스를 먼저 지정해준 뒤, 레이아웃에 설정해주자. ImageView에 색깔을 넣는 방식은 ColorFilter를 설정해주는 방법과 Tint 값을 설정해주는 방법이 있..

    [Android] RxKotlin과 Retrofit2를 사용해 Github api 정보 가져오기

    RxKotlin과 Retrofit2를 사용하여 api 통신 하는 예제입니다. 예제에서는 Github에서 제공하는 api를 사용하여 사용자의 repository 정보들을 가져옵니다. 1. dependency 추가 Rxkotlin과 Retrofit2 의존성을 app 수준의 gradle 파일에 추가해줍니다. /* Retrofit2 */ implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.okhtt..

    [Android] Glide 라이브러리 사용하기

    Glide란? 구글에서 공개한 이미지 라이브러리 가장 성능이 좋은 이미지 로딩 라이브러리로 알려져 있다. 기본적으로 사진 로딩과 동영상, gif 파일 로딩까지 지원한다. Gradle 추가 gradle에 Glide 라이브러리를 추가해준다. (https://github.com/bumptech/glide) build.gradle(Module:app) dependencies { implementation 'com.github.bumptech.glide:glide:4.10.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' } Glide 기본 사용법 val imageView: ImageView = findViewById(R.id.imageView..

728x90