본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Snackbar 를 써보자

by 돼지왕 왕돼지 2019. 1. 20.
반응형



addCallback, BaseTransientBottomBar, Callback, com.android.support:design, combination of coordinatorlayout and snackbar, CoordinatorLayout, dismiss, DISMISS_EVENT_ACTION, DISMISS_EVENT_CONSECUTIVE, DISMISS_EVENT_MANUAL, DISMISS_EVENT_SWIPE, DISMISS_EVENT_TIMEOUT, isshown, isshownorqueued, LENGTH_INDIFINITE, LENGTH_LONG, LENGTH_SHORT, onDismiss, onShown, removecallback, setaction, setactiontextcolor, setduration, settext, Show, snackbar activity, snackbar api, snackbar dependency, snackbar disappear, snackbar gradle, snackbar position, snackbar swipe, snackbar timeout, snackbar user interaction, snackbar window, snackbar.make, sncakbar show, toast vs snackbar, window decor view, [android] Snackbar 를 써보자, 최상단 window


-

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()


addCallback, BaseTransientBottomBar, Callback, com.android.support:design, combination of coordinatorlayout and snackbar, CoordinatorLayout, dismiss, DISMISS_EVENT_ACTION, DISMISS_EVENT_CONSECUTIVE, DISMISS_EVENT_MANUAL, DISMISS_EVENT_SWIPE, DISMISS_EVENT_TIMEOUT, isshown, isshownorqueued, LENGTH_INDIFINITE, LENGTH_LONG, LENGTH_SHORT, onDismiss, onShown, removecallback, setaction, setactiontextcolor, setduration, settext, Show, snackbar activity, snackbar api, snackbar dependency, snackbar disappear, snackbar gradle, snackbar position, snackbar swipe, snackbar timeout, snackbar user interaction, snackbar window, snackbar.make, sncakbar show, toast vs snackbar, window decor view, [android] Snackbar 를 써보자, 최상단 window


두 줄까지만 나오고 나머지는 ... 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()


addCallback, BaseTransientBottomBar, Callback, com.android.support:design, combination of coordinatorlayout and snackbar, CoordinatorLayout, dismiss, DISMISS_EVENT_ACTION, DISMISS_EVENT_CONSECUTIVE, DISMISS_EVENT_MANUAL, DISMISS_EVENT_SWIPE, DISMISS_EVENT_TIMEOUT, isshown, isshownorqueued, LENGTH_INDIFINITE, LENGTH_LONG, LENGTH_SHORT, onDismiss, onShown, removecallback, setaction, setactiontextcolor, setduration, settext, Show, snackbar activity, snackbar api, snackbar dependency, snackbar disappear, snackbar gradle, snackbar position, snackbar swipe, snackbar timeout, snackbar user interaction, snackbar window, snackbar.make, sncakbar show, toast vs snackbar, window decor view, [android] Snackbar 를 써보자, 최상단 window


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




반응형

댓글