일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- adapter
- 안드로이드스튜디오
- LayoutManger
- 테마 아이콘
- IntentTestRule
- 리사이클러뷰
- Fragment 수동 추가
- 코딜리티
- Fragment에서 Activity의 함수 사용하기
- recyclerview
- 코틀린
- 구분선
- Android
- 뷰변경 감지
- 안드로이드
- espresso
- searchview
- 안드로이드개발레벨업교과서
- 재사용
- high order function
- binding adapter
- 안드로이드13
- viewholder
- 생명주기
- 고차함수
- 스와이프
- Error:Execution failed for task ':app:mergeDebugResources'
- ui test
- fragment
- ActivityTestRule
Archives
- Today
- Total
룬아님의 취중코딩
BottomSheetDialogFragment의 ScrollView에서 radius와 clip 적용하기 본문
1. ScrollView에 투명 배경과 함께 radius를 적용한다.
detail_bottom_sheet_dialog_bgr.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/radius_large"
android:topRightRadius="@dimen/radius_large" />
<solid android:color="@color/colorWhite" />
</shape>
styles.xml
<style name="BottomSheet" parent="@style/Widget.Design.BottomSheet.Modal">
<item name="android:background">@drawable/detail_bottom_sheet_dialog_bgr</item>
</style>
<style name="BaseBottomSheetDialog" parent="@style/Theme.Design.Light.BottomSheetDialog">
<item name="android:windowIsFloating">false</item>
<item name="bottomSheetStyle">@style/BottomSheet</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="BottomSheetDialogTheme" parent="BaseBottomSheetDialog" />
ProductDetailFragment.kt
override fun getTheme(): Int = R.style.BottomSheetDialogTheme
그러면 radius를 적용했음에도 불구하고 scollview 안에 있는 아이템들이 fragment view 밖으로 벗어나 원하는 뷰가 나오지 않는다.
2. Scrollview에 radius 적용
@BindingAdapter("app:topRadius")
fun setScrollViewTopRadius(scrollView: ScrollView, radiusSize: Float) {
scrollView.outlineProvider = object : ViewOutlineProvider() {
override fun getOutline(view: View, outline: Outline) {
outline.setRoundRect(
0,
0,
view.width,
view.height,
radiusSize
)
}
}
scrollView.clipToOutline = true
}
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
app:topRadius="@{@dimen/spacing_large}">
....
</ScrollView>
outlineProvider를 커스텀하여 radius를 넣어주고 clipToOutline을 true로 해주면
이렇게 원했던 결과를 얻을 수 있다.
반응형
'개발 > 안드로이드 개발' 카테고리의 다른 글
Databinding에서 다른 뷰의 visibility 상태를 가져오는 방법 (0) | 2020.01.23 |
---|---|
SearchView iconifiedByDefault를 false로 했을 때 자동으로 키보드 올라오는 것 막기 (0) | 2020.01.21 |
TaskStackBuilder 사용 시 이전 task는 어떻게 될까? (0) | 2020.01.17 |
BottomSheetDialogFragment 드래그 되지 않게 막는 방법 (0) | 2020.01.16 |
BottomSheetDialogFragment full screen 으로 show 하는 방법 (2) | 2020.01.16 |
Comments