Snackbar은 안드로이드에서 경고, 안내 또는 액션을 사용자에게 표시하는데 사용되는 컴포넌트입니다. Snackbar은 Material Design 스타일에 따라 디자인되어 있으며, 사용자에게 간단한 메시지를 표시하거나 사용자의 조작에 대한 피드백을 제공하는 데 유용
Snackbar은 일시적으로 화면의 하단에 나타나며, 일정 시간이 지나면 자동으로 사라진다. Snackbar은 사용자가 액션을 수행할 수 있는 버튼을 포함할 수 있다.
snackbar = Snackbar.make(it,"기본 스낵바",Snackbar.LENGTH_INDEFINITE)
fun showCustomSnackbar(view: View, message: String) {
val snackbar = Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE)
snackbar.addCallback(object:BaseTransientBottomBar.BaseCallback<Snackbar>(){
override fun onShown(transientBottomBar: Snackbar?) {
showSnackTextView.text = "snackbar 나타났습니다!"
super.onShown(transientBottomBar)
}
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
showSnackTextView.text = "SnackBar가 사라졌습니다!"
super.onDismissed(transientBottomBar, event)
}
})
snackbar.show()
}
BaseTransientBottomBar.BaseCallback()를 사용하여 Snackbar의 콜백을 정의하고, 필요한 콜백 메서드를 오버라이드하여 원하는 동작을 구현할 수 있다.
fun showCustomSnackbar(view: View, message: String) {
val snackbar = Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE)
snackbar.addCallback(object:BaseTransientBottomBar.BaseCallback<Snackbar>(){
override fun onShown(transientBottomBar: Snackbar?) {
showSnackTextView.text = "snackbar 나타났습니다!"
super.onShown(transientBottomBar)
}
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
showSnackTextView.text = "SnackBar가 사라졌습니다!"
super.onDismissed(transientBottomBar, event)
}
})
// snackbar 메시지 색상
snackbar.setTextColor(Color.WHITE)
// 배경색
snackbar.setBackgroundTint(Color.GRAY)
// 애니메이션
snackbar.animationMode = Snackbar.ANIMATION_MODE_SLIDE
// Action 설정
snackbar.setAction("Action1"){
activityMainBinding.textView2.text = "Action1을 눌렀습니다."
}
snackbar.show()
}
activityMainBinding.run{
showSnackTextView = textView
button.setOnClickListener {
showCustomSnackbar(root, "메시지") // root를 Snackbar를 표시할 View로 전달
}
}
button2.setOnClickListener {
// snackbar 변수가 초기화 되어있다면
if(::snackbar.isInitialized){
if(snackbar.isShown==true) snackbar.dismiss()
}
}
fun showCustomSnackbar(view: View, message: String){
snackbar = Snackbar.make(view,message,Snackbar.LENGTH_INDEFINITE)
// viewbinding
val snackbarBinding = SnackbarBinding.inflate(layoutInflater)
snackbarBinding.run{
imageViewSnackBar.setImageResource(R.drawable.kotlin_icon_130893)
TextViewSnackBar.text = message
}
val snackBarLayout = snackbar.view as Snackbar.SnackbarLayout
snackBarLayout.addView(snackbarBinding.root)
// snackbar가 가지고 잇는 Textview를 보이지 않게 한다.
val t1 = snackBarLayout.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
t1.visibility = View.INVISIBLE
snackbar.show()
}
-> 사이즈 실수로 이렇게 크게되었다.