안녕하세요? 닉네임간편입니다. 이번 시간에는 뱃지 드로어블에 Fab 버튼을 추가하는 것에 대해서 다루겠습니다.
1. 개요
상용 서비스 앱에서 알람이 오면 앱 위에 숫자가 나타나는 걸 확인할 수 있습니다.
이처럼 아이콘 위에 중첩되어 숫자 혹은 어떤 정보를 표시할 수 있도록 하는 것이 바로 BadgeDrawable입니다.
2. 사용법
저는 FloatingActionButton에 badgeDrawable을 사용했습니다. 따라서 이 경우의 사용법에 대해서 설명드리겠으며, 코드는 다음과 같습니다.
binding.specificFab.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
@SuppressLint("UnsafeOptInUsageError")
override fun onGlobalLayout() {
badgeDrawable = BadgeDrawable.create(this@SpecificActivity)
badgeDrawable!!.number= 0
badgeDrawable!!.setVisible(false)
badgeDrawable!!.horizontalOffset= 55
badgeDrawable!!.verticalOffset= 55
badgeDrawable!!.backgroundColor=resources.getColor(R.color.white)
badgeDrawable!!.badgeTextColor=resources.getColor(R.color.bamin)
BadgeUtils.attachBadgeDrawable(badgeDrawable!!, binding.specificFab,
null)
binding.specificFab.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
1) viewTreeObserver, GlobalLayoutListener
리스너를 등록해서 뷰 트리에서 전역적인 변화를 감지할 수 있도록 합니다. 이때 addOnGlobalLayoutListener를 사용하면 전체 뷰가 그려졌을 때 notice를 받아서 처리할 수 있습니다. 이때는 fab 버튼이 그려졌을 때 badgeDrawable을 위에 중첩시켜서 그려야 하므로 이렇게 구현했습니다.
옵저버 리스너를 등록한 후 변경이 있을 때는 1회성을 위해 removeOnGlobalLayoutListener() 메서드로 리스너를 제거해야 합니다. 만일 제거를 하지 않는다면 무한 리스너 호출에 빠질 수 있습니다.
[참조: https://faith-developer.tistory.com/188]
2) @SuppressLint("UnsafeOptInUsageError")
Lint(린트)는 구조적 문제로 인해 앱의 안정성과 효율성에 영향을 미치거나 코드 관리에 지장을 줄 가능성이 있는 코드를 찾을 수 있도록 해줍니다.
이때 안드로이드 프로젝트에서 클래스 또는 메서드의 린트 검사를 사용 중지하려면 코드에 @SuppressLint 주석을 추가합니다. 예를 들어 @SuppressLint("NewApi")를 추가하면 NewApi 문제의 린트 검사를 중지하고 개발자가 해당 API를 사용할 수 있도록 합니다.
이 코드에서 사용하는 BadgeUtils는 @Experimental 어노테이션으로 marked되어있습니다. 이 경우 Experimental API는 현재 API 레벨에서 ERROR를 보고할 수 있기 때문에, 이것의 린트 검사를 중지해야 합니다. 따라서 이 코드를 적어줍니다.
3) number
뱃지 드로어블에 표시될 숫자를 설정합니다.
4) setVisible
화면에 표시될지를 설정합니다.
5) horizontalOffset, verticalOffset
각각 가로, 세로로 이 뱃지가 부착될 anchor의 가운데를 기준으로 어떻게 배치될지를 결정합니다. 뱃지는 기본적으로 우측 상단에 배치되므로, 각각의 값이 커질수록 좌측 하단으로 이동합니다.
6) BadgeUtils.attachBadgeDrawable
이 뱃지를 원하는 곳에 배치합니다. 세번째 파라미터는 customBadgeParent로, 원하는 레이아웃이 있을 때 사용합니다.
아래처럼 Fab 버튼에 뱃지 드로어블이 적용됩니다.
3. 마무리
이번 시간에는 뱃지 드로어블에 대해서 다루고, 이를 Fab 버튼에 대해서 적용했습니다.
뱃지 드로어블은 많은 서비스에서도 잘 사용되기 때문에, 이번 기회에 잘 정리하셨으면 좋겠습니다.
'Android > 공부' 카테고리의 다른 글
ExpandableListView - 확장 가능한 리스트뷰 (0) | 2021.11.25 |
---|---|
scope(스코프) 함수 (0) | 2021.11.13 |
스플래시(Splash) 화면 (2) | 2021.10.01 |
텍스트뷰(TextView) 옆에 이미지 설정하는 법 (0) | 2021.09.30 |
[Manifest 정복] 3. 매니페스트(Manifest) 의 권한, 기기 호환성, 그 이외의 요소 (0) | 2021.09.11 |