-
com.android.support:design:27.1.0 부터 사용 가능하며, BaseTransientBottomBar 를 상속한다
-
1개의 버튼과 함께 메시지를 전달할 수 있는 형태의 Toast 라고 보면 될 듯 싶다.
한번에 하나만 표시 가능하며, Z 축 기준 최상단에 그려진다.
제거 방법
1. timeout 후에 자동제거
2. 새로운 surface 나 activity 가 등장할 때 자동 제거
3. user 가 swipe 로 제거
표시 위치
작은 단말(폰) : 스크린 하단에 표시
큰 단말(테블릿) : 왼쪽 하단에 표시
Callbacks
버튼에 대한 설정은 setAction(CharSequence buttonText, View.OnClickListener listener) 를 통해 한다.
Snack 가 등장하거나 제거되었을 때의 Callback 은 addCallback(Snackbar.Callback callback) 을 통해 등록한다.
표시 시간
LENGTH_INDEFINITE : 다른 Snackbar 가 나오거나 유저가 dismiss 하기 전까지 계속 노출
LENGTH_LONG
LENGTH_SHORT
General Usage
Snackbar.make(findViewById(R.id.myCoordicatorLayout), “Email is deleted”, Snackbar.LENGTH_SHORT) .setAction(“UNDO”, new MyUndoListener()) .show(); // Toast 처럼 반드시 show 를 불러주자
API
Snackbar 전용
static make(View view, CharSequence text, int duration)
주어진 view 기준 snackbar 를 붙일 parent 를 찾는다. CoordinatorLayout 이나 window decor view 를 찾는다.
CoordinatorLayout 을 찾았을 경우에는 FloatingActionButton 처럼 약간의 추가적인 Feature 를 사용 가능하다.
setAction(CharSequence text, View.OnClickListener listener)
setActionTextColor(ColorStateList colors)
setText(CharSequence message)
Snackbar 의 메시지를 update 한다.
BaseTransientBottomBar
addCallback(BaseCallback<B> callback)
BaseCallback 은 다음의 callback 함수를 갖는다.
onDismiss(B transientBottomBar, int event)
onShown(B transientBottomBar)
onDismiss 에 전달되는 event 는 다음이 있다.
DISMISS_EVENT_ACTION : action click 으로
DISMISS_EVENT_CONSECUTIVE : new snackbar 의 등장으로 인해
DISMISS_EVENT_MANUAL : dismiss() 콜로 인해
DISMISS_EVENT_SWIPE : swipe 로
DISMISS_EVENT_TIMEOUT : timeout 으로
removeCallback(BaseCallback<B> callback)
dismiss()
isShown()
isShownOrQueued()
setDuration(int duration)
show()
긴 메시지와 New line에 대한 테스트
Snackbar.make(it, "이것이 바로 스낵바야 인생의 진리지 꺄오오오오오 아하하하하하하 감자감자 감자뿅\n\n뉴라인도 잘먹는지 보자\n쿠헤헤헤헤 얼마나 크게 될까?\n이정도만 하자 으히", Snackbar.LENGTH_INDEFINITE) .show()
두 줄까지만 나오고 나머지는 ... ellipsize 된다.
뉴 라인(\n)은 잘 적용된다.
긴 버튼 메시지와 New Line 테스트
Snackbar.make(it, "이것이 바로 스낵바야 인생의 진리지\n꺄오오오오오 아하하하하하하 감자감자 감자뿅 뉴라인도 잘먹는지 보자 쿠헤헤헤헤 얼마나 크게 될까?\n이정도만 하자 으히", Snackbar.LENGTH_INDEFINITE) .setAction("버튼은 어느정도 영역을 먹을까나?\n이정도는 어때\n\n오 이정도까지??\n버튼이야말로 인생의 진리구나\n어디까지 가나 한번 봐보실까나~?\n가 즈 아~~") { Log.e("cklee", "MMM button is clicked!") } .show()
Button 에 명시한 Text 는 표시할 수 있는 한 최대로 보여주며, 영역을 많이 차지한다. New Line 으로 길~~게 했을 때 화면 전체를 덮는다.
Button Text 는 Message 보다 우선 순위를 영역을 확보한다. 그래서 뉴 라인 없이 버튼 Text 를 아주 길게 했을 때 Message 는 안 보이고 버튼만 보인다.
new line 도 잘 먹는다.
기타
Snackbar 는 View 를 함께 던저주기 떄문에 Activity 가 종료하거나 하는 경우 Toast 와는 다르게 자동으로 dismiss 가 된다.
참고 자료
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] 변경이 잦은 gradle 설정 분리하기 (0) | 2019.01.22 |
---|---|
[android] Transition animations (0) | 2019.01.21 |
[Android] SMS Retriever API - SMS 권한 없이 인증번호 읽어오기! (0) | 2019.01.18 |
연락처 계정 생성시 OEM 에서 연락처에서 추가/편집 가능한 Field 정의 (0) | 2019.01.17 |
[Map] HashMap vs. TreeMap vs. LinkedHashMap (0) | 2019.01.11 |
댓글