본문 바로가기
안드로이드/메세징

안드로이드 SnackBar

by 김어찐 2022. 6. 13.
728x90

Toast의 업그레이드 버전이라고 불리기도 하는 메시징 도구이다.
Activity 위에 표시되며 하단에 나타나는 메시지이다.
안드로이드 11버전 부터 기본 Toast는 계속 사용 가능하고  커스터마이징 부분은 SnackBar를 이용하는 것을 권장한다.

 

기본 구성

SnackBar.make 메서드를 통해 SnackBar를 구성하고 show 메서드로 표시하면된다.
setTextColor : 표시되는 메시지의 색상을 설정한다.
setBackgroundTint : 배경 색상을 지정한다.
animationMode : 나타나고 사라지는 애니메이션을 설정한다.
setAction : 클릭하면 이벤트를 처리할 수 있는 요소를 설정한다.

 

 

CallBack

val callback = object : BaseTransientBottomBar.BaseCallback<Snackbar>(){

   
override fun onShown(transientBottomBar: Snackbar?) {
        textView2.
text = "SnackBar가 나타났습니다"
   
}
   
   
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
       
super.onDismissed(transientBottomBar, event)
        textView2.
text = "SnackBar가 사라졌습니다"
   
}
}
snack1.addCallback(callback)

 

 

커스터마이징

Snackbar는 새로운 View를 설정하는 메서드나 프로퍼티가 없다.
Snackbar를 구성하기 위해 사용되는 Layout을 추출해 View를 추가해서 처리한다.

 

 

package com.example.snackbar

import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.TextView
import com.google.android.material.snackbar.BaseTransientBottomBar
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.custom_snackbar.view.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
//            val snack1 = Snackbar.make(it,"기본 스낵바",Snackbar.LENGTH_SHORT)
            // 클릭할떄까지 대기
            val snack1 = Snackbar.make(it,"기본 스낵바",Snackbar.LENGTH_INDEFINITE)

            snack1.setTextColor(Color.RED)
            snack1.setBackgroundTint(Color.BLUE)

            snack1.animationMode= Snackbar.ANIMATION_MODE_FADE

            val callback = object : BaseTransientBottomBar.BaseCallback<Snackbar> (){
                override fun onShown(transientBottomBar: Snackbar?) {
                    super.onShown(transientBottomBar)
                    textView2.text = "SnackBar가 나타났습니다"
                }

                override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
                    super.onDismissed(transientBottomBar, event)
                    textView2.text = "SnackBar가 사라졌졌습니다"
               }


            }

            snack1.setAction("Action"){
                textView.text = "Action Click"
            }

            snack1.show()
        }

        button2.setOnClickListener {
            // 스낵바 만들어준다.
            val snack2 = Snackbar.make(it,"Custom SnackBar",Snackbar.LENGTH_SHORT)


            // 스낵바를 통해 보여줄 뷰를 생성한다.
            val snackView = layoutInflater.inflate(R.layout.custom_snackbar, null)

            snackView.run {
                imageView.setImageResource(R.drawable.img_android)
                textView3.text="새로 추가된 View"
                textView3.setTextColor(Color.WHITE)
            }

            // 스낵바 레이아웃을 추출해서 새로운 뷰를 추가한다.
            val snackbarLayout = snack2.view as Snackbar.SnackbarLayout
            snackbarLayout.addView(snackView)

            // 스낵바에 있는 TextView를 추출해 이를 보이지 않게 처리한다.
            val snackText = snackbarLayout.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
            snackText.visibility = View.INVISIBLE

            snack2.show()
        }
    }

}

 

728x90

'안드로이드 > 메세징' 카테고리의 다른 글

안드로이드 Notification  (0) 2022.06.13
안드로이드 항목 선택 Dialog  (0) 2022.06.13
안드로이드 ListDialog  (0) 2022.06.13
안드로이드 Dialog  (0) 2022.06.13
안드로이드 Toast  (0) 2022.06.09