토스트는 Toast의 makeText() 함수를 만든다.
makeText() 함수의 두 번째 매개변수가 출력할 문자열이며, 세 번째 매개변수는 토스트가 화면에 출력되는 시간으로, 보통 다음의 상수를 사용함
토스트 메시지는 makeText() 함수를 이용하지 않고 다음의 세터 함수로 만들 수 있다.
open fun setDuration(duration:Int):Unit open fun setGravity(gravirty:Int, xOffset:Int, yOffiset : Int ) : Unit open fun setMargin(horizontalMargin:Float, verticalMargin:Float):Unit open fun setText(resId:Int):Unit
val text = "기본 토스트 메시지 입니다. "
val toast = Toast.makeText(this@MainActivity, text, Toast.LENGTH_LONG)
activityMainBinding.run{
button.setOnClickListener {
toast.show()
}
button2.setOnClickListener {
toast.setText("재 사용 하기 1")
toast.show()
}
}
activityMainBinding.run{
button.setOnClickListener {
val toast = Toast.makeText(this@MainActivity, "종료하시려면 한 번더 누르세요", Toast.LENGTH_LONG)
toast.show()
}
}
버튼 클릭시 띄워졌다가 5초후 자동으로 사라진다.
@RequiresApi(Build.VERSION_CODES.R)
안드로이드 앱에서 특정 API 레벨 이상이 필요한 경우를 나타내는 애노테이션(Annotation)
안드로이드에서는 각 API 레벨마다 새로운 기능이나 변경된 동작이 도입된다. 앱이 실행되는 디바이스의 API 레벨이 지정된 API 레벨보다 낮을 경우, 해당 API를 사용하는 부분에서 예외가 발생할 수 있다.
이를 방지하기 위해 @RequiresApi 애노테이션을 사용하여 앱이 실행되는 디바이스의 API 레벨을 체크하고, 필요한 최소 API 레벨 이상이 되어야 해당 부분이 실행되도록 지정할 수 있다.
@RequiresApi(Build.VERSION_CODES.R)은 API 레벨 R(Android 11) 이상이 필요한 경우를 나타낸다. 이 애노테이션을 사용하여 코드의 가독성을 높이고, 컴파일러에게 해당 API를 사용하는 부분에서 경고를 표시하도록 할 수 있다. 따라서, 해당 애노테이션이 있는 코드 블록은 API 레벨 R 이상에서만 실행되도록 보장할 수 있다.
@RequiresApi(Build.VERSION_CODES.R)
fun showToast(message:String){
val toast = Toast.makeText(this,message,Toast.LENGTH_SHORT)
toast.addCallback(
object : Toast.Callback(){
override fun onToastHidden() {
super.onToastHidden()
activityMainBinding.textView.text = "토스트메시지가 끝났습니다.."
}
override fun onToastShown() {
super.onToastShown()
activityMainBinding.textView.text = "토스트메시지가 보여지고 있습니다."
}
}
)
toast.show()
}
Toast의 콜백을 등록하려면 Toast.Callback 타입의 객체를 토스트 객체의 addCallback() 함수로 등록하면된다.
이렇게 하면 토스트가 뜨는 순간 자동으로 onToastShown() 함수가 호출, 화면에서 사라지는 순간 onToastHidden() 함수가 자동으로 호출
CustomToast 화면 만들기
fun customToast(message:String){
val toastBinding = ToastBinding.inflate(layoutInflater)
toastBinding.run{
imageView.setImageResource(R.drawable.android)
textViewToast.text = message
val t1 = Toast(this@MainActivity)
// view를 설정한다.
t1.view = toastBinding.root
// 배경설정
toastBinding.root.setBackgroundResource(android.R.drawable.screen_background_dark)
// 텍스트 뷰 색상 설정
textViewToast.setTextColor(Color.WHITE)
// 위치 설정
t1.setGravity(Gravity.CENTER,0,300)
// 시간 설정
t1.duration = Toast.LENGTH_LONG
t1.show()
}
}