플로팅 작업 버튼 추가 | Android 개발자 | Android Developers
[Android/Kotlin] CoordinatorLayout 사용하기 (1) - 기초
```kotlin
app:fabSize="normal"
app:fabCustomSize="32dp"
app:maxImageSize="12dp"
```
FAB(플로팅액션버튼)의 사이즈와 이미지의 사이즈를 정해줘야함
FAB의 디자인 특성은 기본적으로 wrap_content로 아이콘의 크기에 맞춰 배경이 정해지는데
이 레이아웃의 너비를 바꾸면 배경을 바뀌지만 아이콘의 크기는 그대로가됨
그렇기 땜에 fab의 사이즈와 이미지의 사이즈를 조정해줌
→ 그럼 이미지 사이즈만 조정하고 배경은 레이아웃으로 조정하면안됨?
ㅇㅇ 안됨 열심히 원인을 찾아도 이유를 잘 모르겠지만 FAB의 레이아웃의 크기를 조절해도 처음 wrap_content의 중심을 기준으로 이미지가 생성됨
이미지를 작게한다해도 레이아웃의 크기를 조절하면 이상한 위치에 이미지가 출력되기 때문에 레이아웃이아닌 fab의 CustomSize를 조절해야함
→ 이미지 크기를 왜 줄임? 그냥 scaleType바꾸면 안됨?
ㅇㅇ 안됨 , 스케일타입은 이미지 뷰나 그 하위 클래스만 사용가능한데 FAB은 이미지뷰를 상속하지 않기 때문에 가능하지 않다
NestedScrollView
로 리사이클러뷰를 감싸고 있으면 리사이클러뷰 스크롤 리스너가 제대로 작동하지 않습니다
스크롤되는건 리사이클러뷰가아니라 nestedScrollView기 때문에 스크롤을 해도 인식하지 않아요
nestedScrollView로 스크롤리스너를 사용해서 해결가능 합니다
private fun setFab() {
binding.nvMainScroll.setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
if (scrollY == 0) {
// 최상단
binding.faMainFab.visibility = View.GONE
} else{ // 그 외
binding.faMainFab.visibility = View.VISIBLE
}
})
onClickFab()
}
혹시 플로팅 버튼도 네스티드 스크롤뷰 안에 있나요
그렇다면 밖으로 꺼내고 ConstraintLayout안에 NestedScrollView
와 FAB을 나눠 넣어보세요
FAB을 화면 하단에 위치시키면 네스티드 스크롤뷰는 스크롤 되지만 FAB은 스크롤 되지않기 떄문에 화면에 고정이 가능합니다
리사이클러뷰를 NestedScrollView
로 감싸고 있다면
레이아웃을 CoordinatorLayout으로 사용하면 해결이 가능
바꾸면 무슨차인대?
NestedScrollView안에 RecyclerView를 넣는 경우 네스티드 스크롤뷰의 스크롤동작에 리사이클러뷰가 동기화되서 아이템이 한번에 로드됨
그럼 리사이클러뷰의 장점인 대량의 데이터를 효율적으로 처리하는 능력을 잃어버리는것
하지만 CoordinatorLayout 을 사용하면 리사이클러뷰의 장점을 살릴 수 있게된다
코디네이터 레이아웃은 애초에 앱바-리사이클러뷰(or네스티드뷰)-플로팅액션버튼 구성이 기본이라
과제에서 요구하는 앱바처리 플로팅버튼 처리에 가장 적합한 레이아웃이라 생각이 듬
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rc_main_post"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
layout_behavior를 사용하자
****CoordinatorLayout
의 자식 뷰들이 서로 상호 작용하도록 할 때 유용하게 사용되는대
"@string/appbar_scrolling_view_behavior"
를 사용하면, 해당 뷰는 AppBarLayout
의 스크롤 동작에 응답하는 방식으로 동작 하게된다