728x90

Android

    [Android] ConstraintLayout 가상 오브젝트 - Guideline, Barrier, Group

    ConstraintLayout에는 레이아웃을 구성하기 위한 가상 오브젝트들이 존재한다. 가상 오브젝트란 실제 레이아웃에는 나타나지 않으며, 실제 레이아웃을 배치할 때 좀 더 편리하게 구성할 수 있게 도움을 준다. 1. Guideline 가이드라인은 가로 또는 세로의 축을 가진 가상의 뷰로써, 부모 뷰의 특정 위치를 기준점으로 삼을 때 사용한다. 가로/세로를 적용할 때는 LinearLayout과 같이 android:orientation 옵션으로 설정할 수 있다. 가로/세로를 정했다면 이제 위치를 정해야 한다. 위치를 정하는 옵션으로는 3가지가 있다. app:layout_constraintGuide_begin app:layout_constraintGuide_end app:layout_constraintGui..

    [Android] DataBinding - BindingAdapter 활용하기

    DataBinding이란 xml 파일에 data를 연결(binding)해서 사용할 수 있게 도와주는 Android Jetpack 라이브러리에서 제공하는 기능 중 하나로써, 보통 MVVM 패턴을 구현할 때 LiveData와 함께 많이 사용하는 편이다. 그런데 데이터 바인딩을 하는데 내가 원하는 속성이 없으면 어떻게 할까? 예를 들면, ImageView에 Glide를 사용해서 이미지 url을 연결해주고 싶다면 기본적으로 제공하는 속성들로는 연결해줄 수 없다. 이런 경우에 BindingAdapter를 사용해서 처리할 수 있다. 또한, 여러 곳에서 사용하는 공통 로직을 모듈화 시켜서 코드 중복을 최소화할 수 있다. 1. BindingAdapter 생성 예제로 서버로부터 프로필 URL을 받아와서 ImageView..

    [Android] parent의 영역을 벗어나서 UI를 그려보자 - clipChildren

    안드로이드에서는 기본적으로 View를 그릴 때 그릴 수 있는 영역이 제한되어 있다. 보통 parent가 가진 영역만큼 View를 그릴 수 있다. 하지만 개발하다 보면 parent의 영역을 벗어나게끔 그리고 싶을 때가 생긴다. 이럴 때 clipChildren 옵션을 사용하면 가능해진다. 예시를 통해 알아보자. 위와 같은 화면이 있다고 해보자. 검은색 레이아웃 안에 빨간색 View가 있는 상태이다. 검은색 레이아웃을 벗어나기 위해 marginTop 옵션을 줘서 밑으로 내린 상태다. 위의 레이아웃 아래와 같다. 검은색의 레이아웃은 전체 길이가 300dp로 주었고, 빨간색의 VIew는 marginTop을 250dp를 주었다. 따라서 50dp 정도를 검은색 레이아웃을 벗어나서 그려지길 원했다. 하지만 위의 사진처..

    [Android] Custom Calendar 만들기 - Infinite ViewPager 구현

    지난 프로젝트에서 Calendar를 만들게 되었는데, 만드는 과정에서 까다로웠던 부분이 있어서 블로그에 공유하려고 한다. 월간 달력 부분을 만들어야 했고, 처음에는 간단하게 생각했다. 월간 달력은 그리드 형태기 때문에 GridView나 RecyclerView를 사용하려 했고, 좌우로 스와이프가 되어야 했기에 ViewPager2를 사용하여 구현하면 금방 할 줄 알았다. 하지만... 1. Infinite ViewPager 월간 달력은 좌우로 무제한으로 스와이프 되어야 한다는 조건이 있었다. 이걸 어떻게 구현해야 할까 고민하다가 찾아보니 스와이프 할 때마다 페이지를 추가, 삭제하면서 현재 position 값을 고정적으로 유지하는 방법이 있었다. 위의 사진과 같이 전체 item 개수를 3개로 고정한 뒤, 오른쪽..

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

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

    [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 값을 설정해주는 방법이 있..

728x90