일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 팩토리 메소드
- 옵저버 패턴
- 싱글톤
- 디자인패턴 #
- 빌터패턴
- Design Pattern
- Singleton
- a
- 추상팩토리패턴
- Abstract Factory
- El
- 프로토타입 패턴
- 함수형프로그래밍
- r
- 디자인패턴
- factory method
- 추상 팩토리
- ㅓ
- 코틀린
- ㅋㅁ
- designPattern
- Observer Pattern
- PrototypePattern
- builderPattern
- F
- Functional Programming
- Kotlin
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
안드로이드 버텀시트 BottomSheets 본문
Usage
bottom sheet는 주로 모바일에서 사용되는 보조 surface입니다.
다양한 사용 사례에 적합한 세 가지 유형이 있습니다.
standard bottom sheet
- 화면의 주요 콘텐츠를 보완하는 콘텐츠를 표시합니다.
- 사용자가 기본 콘텐츠와 상호 작용하는 동안 계속 표시됩니다.
- 사용자는 멀티태스킹에 유용한 standard bottom sheet 및 나머지 화면을 보고 상호 작용할 수 있습니다.
standard bottom sheet 음악 플레이어를 사용하면 사용자가 앨범을 탐색하는 동안 음악을 제어할 수 있습니다.
modal standard bottom
- 인라인 메뉴 또는 모바일의 간단한 대화에 대한 대안이며 추가 항목, 더 긴 설명 및 아이콘을 위한 공간을 제공합니다.
- 기본 콘텐츠와 상호 작용하려면 sheet를 내려서 제거한 후 가능하다.
- 사용자는 모달 하단 시트와 상호 작용하거나 닫아야 한다.
- 차단 동작으로 인해 사용자가 사용 가능한 선택에 집중할 수 있도록 이 파일 앱과 같은 메뉴에 적합합니다.
Expanding bottom sheets
- 사용자가 주요 기능이나 작업에 액세스하기 위해 확장할 수 있는 축소된 작은 표면을 제공합니다.
- 그들은 모달 시트의 공간과 초점으로 표준 시트에 대한 지속적인 액세스를 제공합니다.
- 사용자는 전체 콘텐츠에 액세스해야 할 때 확장 하단 시트를 탭할 수 있습니다.
- 접힌 상태는 선택한 항목의 수 또는 읽지 않은 메시지와 같은 기능의 현재 상태를 나타내는 표시기로 사용할 수 있습니다.
Using bottom sheets
standard bottom sheet
<androidx.coordinatorlayout.widget.CoordinatorLayout
...>
<FrameLayout
...
android:id="@+id/standard_bottom_sheet"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<!-- Bottom sheet contents. -->
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Modal bottom sheet basic usage
class ModalBottomSheet : BottomSheetDialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.modal_bottom_sheet_content, container, false)
companion object {
const val TAG = "ModalBottomSheet"
}
}
class MainActivity : AppCompatActivity() {
...
val modalBottomSheet = ModalBottomSheet()
modalBottomSheet.show(supportFragmentManager, ModalBottomSheet.TAG)
...
}
Setting behavior
standard / modal 하단 시트의 동작을 조정하는 데 사용할 수 있는 몇 가지 속성이 있습니다.
standard 하단 시트
- app:layout_behavior의 속성을 가지고 있는 하위 뷰들에 설정한다.
- 프로그래밍 방식으로 이를 설정하여 xml에 적용할 수 있습니다.
val standardBottomSheetBehavior = BottomSheetBehavior.from(standardBottomSheet)
// Use this to programmatically apply behavior attributes
Modal bottom sheet
<style name="ModalBottomSheet" parent="Widget.MaterialComponents.BottomSheet.Modal">
<!-- Apply attributes here -->
</style>
<style name="ModalBottomSheetDialog" parent="ThemeOverlay.MaterialComponents.BottomSheetDialog">
<item name="bottomSheetStyle">@style/ModalBottomSheet</item>
</style>
<style name="AppTheme" parent="Theme.MaterialComponents.*">
<item name="bottomSheetDialogTheme">@style/ModalBottomSheetDialog</item>
</style>
또는
val modalBottomSheetBehavior = (modalBottomSheet.dialog as BottomSheetDialog).behavior
// Use this to programmatically apply behavior attributes
Retaining behavior on configuration change
구성 변경 시 bottom Sheet의 특정 동작을 저장하고 복원하기 위해 다음 플래그를 설정할 수 있습니다(또는 비트 OR 연산과 결합).
SAVE_PEEK_HEIGHT: app:behavior_peekHeight가 유지됩니다.
SAVE_HIDEABLE: app:behavior_hideable이 유지됩니다.
SAVE_SKIP_COLLAPSED: app:behavior_skipCollapsed가 유지됩니다.
SAVE_FIT_TO_CONTENTS: app:behavior_fitToContents가 유지됩니다.
SAVE_ALL: 앞서 언급한 모든 속성이 유지됩니다.
SAVE_NONE: 속성이 보존되지 않습니다. (기본값)
app:behavior_saveFlags 속성을 통해 xml에서 설정하거나,
bottomSheetBehavior.saveFlags = BottomSheetBehavior.SAVE_ALL
Setting state
STATE_COLLAPSED: 하단 시트는 볼 수 있지만 엿보기 높이만 표시됩니다. 이 상태는 일반적으로 하단 시트의 '휴식 위치'이며 사용자가 상호 작용할 추가 콘텐츠가 있음을 나타내기에 충분한 높이를 가져야 합니다.
STATE_EXPANDED: 하단 시트는 최대 높이에서 볼 수 있으며 끌거나 가라앉지 않습니다(아래 참조).
STATE_HALF_EXPANDED: 하단 시트가 반쯤 펼쳐져 있으며(behavior_fitToContents가 false로 설정된 경우에만 적용 가능) 끌거나 고정되지 않습니다(아래 참조).
STATE_HIDDEN: 하단 시트는 더 이상 표시되지 않으며 프로그래밍 방식으로만 다시 표시할 수 있습니다.
STATE_DRAGGING: 사용자가 하단 시트를 위아래로 적극적으로 드래그하고 있습니다.
STATE_SETTLING: 드래그/스와이프 제스처 후 하단 시트가 특정 높이로 안정화됩니다. 이것은 사용자 작업으로 인해 하단 시트가 숨겨지는 경우 엿보기 높이, 확장 높이 또는 0이 됩니다.
bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
참고: STATE_SETTLING 및 STATE_DRAGGING은 프로그래밍 방식으로 설정하면 안 됩니다.
Listening to state and slide changes
BottomSheetCallback은 다음과 같이 BottomSheetBehavior에 추가할 수 있습니다.
val bottomSheetCallback = object : BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {
// Do something for new state.
}
override fun onSlide(bottomSheet: View, slideOffset: Float) {
// Do something for slide offset.
}
}
// To add the callback:
bottomSheetBehavior.addBottomSheetCallback(bottomSheetCallback)
// To remove the callback:
bottomSheetBehavior.removeBottomSheetCallback(bottomSheetCallback)
Handling insets and fullscreen
BottomSheetBehavior는 다음 중 하나를 지정하여 삽입(예: 가장자리에서 가장자리로)을 자동으로 처리할 수 있습니다.
- app:paddingBottomSystemWindowInsets
- app:paddingLeftSystemWindowInsets
- app:paddingRightSystemWindowInsets
- app:paddingTopSystemWindowInsets
API 21 이상에서는 navigation bar가 투명하고 app:enableEdgeToEdge가 true인 경우 모달 하단 시트가 전체 화면(가장자리에서 가장자리로)으로 렌더링됩니다.
생성자에 전달된 스타일을 업데이트하거나 테마의 ?attr/bottomSheetDialogTheme 속성에 지정된 기본 스타일을 업데이트하여 위의 패딩 속성 중 하나라도 스타일에서 true로 설정되면 자동으로 삽입을 추가할 수 있습니다.
the status bar 아래로 미끄러질 때 , BottomSheetDialog는 하단 시트가 상단에 패딩을 추가하여 컨텐츠가 그 status bar 아래에 그려지는 것을 방지합니다.
Making bottom sheets accessible
BottomSheet의 콘텐츠는 콘텐츠 설명이 설정된 이미지와 같이 자체 접근성 지침을 따라야 합니다.
'Android Material Design' 카테고리의 다른 글
Color System (0) | 2022.10.28 |
---|---|
머터리얼 디자인 테마 적용하기(Icon) (0) | 2022.10.28 |
머터리얼 디자인 테마 적용하기(Color, TypoGraph, Shape) (0) | 2022.10.28 |
안드로이드 머터리얼 디자인 테마(material Design Theming) (0) | 2022.10.28 |
Material Design Theming(머터리얼 디자인 테마) (0) | 2022.10.28 |