안드로이드는 사용자에게 메시지를 전달할 수 있는 다양한 방법을 제공한다.
Toast : 일정 시간이 지나면 자동으로 사라지는 메시지
Dialog : Activity위에 나타나는 메시지
Notification : 알림창에 표시되는 메시지
메시지의 일부는 Activity, Service와 관련이 있다.
안드로이드에서 간단하게 메시지를 표시할 때 사용한다.
화면과 관련 없이 안드로이드 OS에게 메시지 출력을 요청하고 안드로이드 OS에 의해 나타나는 메시지이다.
단말기내의 모든 애플리케이션, 모든 구성요소가 요청할 수 있으며 애플리케이션에 관계없이 요청된 순서대로 메시지가 나타난다.
makeText : Toast 메시지 객체를 만든다. 화면 모양, 글자 크기 및 색상 등은 기본 설정되어 있는 것을 사용한다.
val t1 = Toast.makeText(this@MainActivity, "기본 Toast입니다.", Toast.LENGTH_SHORT)
t1.show()
setGravity : Toast 메시지가 표시될 위치를 설정한다.
setView : Toast 메시지를 통해 보여줄 View를 설정한다. 이를 이용해 커스터마이징이 가능하다.
setDuration : 메시지가 표시된 시간을 설정한다.
안드로이드 11 (API 30) 부터 Toast 에 Callback을 설정할 수 있다.
onToastHidden : Toast 메시지가 사라질 때 호출된다.
onToastShown : Toast 메시지가 나타날 때 호출된다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
t1.addCallback(object : Toast.Callback() {
override fun onToastShown() {
super.onToastShown()
}
override fun onToastHidden() {
super.onToastHidden()
}
})
}
// ViewBinding 객체를 생성한다.
val toastBinding = ToastBinding.inflate(layoutInflater)
toastBinding.run {
imageViewToast.setImageResource(R.drawable.img_android)
textViewToast.text = "Custom Toast 입니다"
val t2 = Toast(this@MainActivity)
//View를 설정한다.
t2.view = toastBinding.root
// 배경
toastBinding.root.setBackgroundResource(android.R.drawable.screen_background_dark)
// 텍스트 뷰의 글자색상
textViewToast.setTextColor(Color.WHITE)
// 위치설정(현재 화면의 중앙에서 0,300 의 위치)
t2.setGravity(Gravity.CENTER, 0, 300)
// 시간 설정
t2.duration = Toast.LENGTH_LONG
t2.show()
}
Toast의 와 비슷하며 Activity 위에 표시되며 하단에 나타나는 메시지이다.
SnackBar.make 메서드를 통해 SnackBar를 구성하고 show 메서드로 표시하면된다.
// SnackBar 객체를 생성한다
// 관리하는 뷰, 메시지, 시간
//val snackbar1 = Snackbar.make(it,"기본 스낵바", Snackbar.LENGTH_SHORT)
//val snackbar1 = Snackbar.make(it, "기본 스낵바", Snackbar.LENGTH_LONG)
val snackbar1 = Snackbar.make(it, "기본 스낵바", Snackbar.LENGTH_INDEFINITE)
setTextColor : 표시되는 메시지의 색상을 설정한다.
setBackgroundTint : 배경 색상을 지정한다.
setAnimationMode : 나타나고 사라지는 애니메이션을 설정한다.
setAction : 클릭하면 이벤트를 처리할 수 있는 요소를 설정한다. 액션은 하나만 설정이 가능하다. 액션을 클릭하면 스낵바가 사라진다.
// 메시지 색상
snackbar1.setTextColor(Color.RED)
// 배경색
snackbar1.setBackgroundTint(Color.BLUE)
// 애니메이션
snackbar1.animationMode = Snackbar.ANIMATION_MODE_FADE
// Action 설정
snackbar1.setAction("Action1"){
activityMainBinding.textView2.text = "Action1을 눌렀습니다"
}
Snackbar가 나타나고 사라졌을 때 반응한다.
// Snackbar의 Callback
snackbar1.addCallback(object:BaseTransientBottomBar.BaseCallback<Snackbar>(){
// snackbar가 나타날 때
override fun onShown(transientBottomBar: Snackbar?) {
super.onShown(transientBottomBar)
}
// snackbar가 사라질 때
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
super.onDismissed(transientBottomBar, event)
}
})
Snackbar는 새로운 View를 설정하는 메서드나 프로퍼티가 없다.
Snackbar를 구성하기 위해 사용되는 Layout을 추출해 View를 추가해서 처리한다.
// 스낵바를 생성한다
val snackbar2 = Snackbar.make(it,"Custom Snackbar",Snackbar.LENGTH_SHORT)
// ViewBinding
val snackberBinding = SnackbarBinding.inflate(layoutInflater)
// View 설정
snackberBinding.run{
imageViewSnackbar.setImageResource(R.drawable.img_android)
textViewSnackbar.text = "새로 추가된 view"
textViewSnackbar.setTextColor(Color.WHITE)
}
// Snackbar의 Layout을 추출하여 새로운 뷰를 추가한다.
val snackbarLayout = snackbar2.view as Snackbar.SnackbarLayout
snackbarLayout.addView(snackberBinding.root)
// Snackbar가 가지고 있는 TextView를 보이지 않게 한다.
val t1 = snackbarLayout.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
// GONE 불가
t1.visibility = View.INVISIBLE