[kotlin] 안드로이드 다이얼로그 - Toast

Leechaeyeon·2023년 6월 30일
0

코틀린 안드로이드

목록 보기
3/21
post-thumbnail

다이얼로그 Dialog

  • 사용자와 상호작용하는 대화상자

토스트 Toast 메시지 띄우기

토스트는 Toast의 makeText() 함수를 만든다.
makeText() 함수의 두 번째 매개변수가 출력할 문자열이며, 세 번째 매개변수는 토스트가 화면에 출력되는 시간으로, 보통 다음의 상수를 사용함

  • Toast.LENGTH_SHORT : 3초정도
  • Toast.LENGTH_LONG : 5초정도
    시간이 지나면 자동으로 사라짐

토스트 메시지는 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
  • setDuration(), setText() : 함수를 이용하면 문자열이나 화면에 보이는 시간을 설정할 수 있다.
  • setGravity(), setMargin() : 함수를 이용하면 토스트가 뜨는 위치를 정할 수 있다.

토스트 메시지 재 사용하기

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초후 자동으로 사라진다.

!!! 메시지가 사라질때 동작할 코드가 있다면

  • Android 11부터 가능하며, 익명 중첩 클래스를 사용한다.
    @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 설정하기

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

0개의 댓글

관련 채용 정보