안드로이드 코틀린 : 토스트(Toast) 팝업 메세지 사용법 및 전역 함수로 사용법
Lucy Archive
Lucy / Facilitate4U
2021. 3. 19. 00:52

Android Kotlin : Toast Message

안드로이드에서 간단한 알림으로 많이 사용되는

Toast 메세지 사용 방법과 기타 편리하게 사용 할 수 있는 방법(전역 함수)에 대해 설명

합니다.

 

Toast 팝업 메세지는?

Toast 는 아래 그림과 같이 화면 아래에 안내 메세지가 나오고 일정 시간이 지나면 자동으로 사라지는 팝업 메세지입니다. Toast 메세지는 클릭 할 수 없습니다.

Toast 메세지

Toast 팝업 메세지 사용법

기본 사용법

Toast 메세지 팝업 메세지는 아래와 같이 사용 할 수 있습니다.

  • 구문 : Toast.makeText(context, text, duration).show()
    • context : applicationContext
    • text : String 타입의 문자열
    • duration : 팝업 메세지 지속 시간
      • Toast.LENGTH_SHORT : 2초
      • Toast.LENGTH_LONG : 3.5초
  • 예시 : Toast.makeText(this, "Hello World!", Toast.LENGTH_SHORT).show()

토스트 메세지를 출력하고 싶은 시점에 위의 코드를 삽입하면 됩니다. 아래는 예시입니다.

package com.blacklog.toast

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.blacklog.toast.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    
    lateinit var binding : ActivityMainBinding
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
        
        binding.button.setOnClickListener { 
            Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show()
        }
    }
}

 

Class 내에서 간단하게 사용하는 방법

Toast는 간단한 기능이지만, 메세지를 출력하기 위한 코드가 길다는 단점이 있습니다. 아래와 같이 클래스 내에 toast 함수를 선언해 놓으면 해당 클래스 내부 어디서든지 간단하게 Toast 메세지 출력이 가능합니다.

package com.blacklog.toast

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.blacklog.toast.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.button.setOnClickListener {
            toast("Hello World!")
        }
    }

    fun toast(message: String){
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
}

Toast 메세지는 표시시간을 조정 할 수 있는데, 이를 컨트롤 하기 위해 아래와 같은 수정된 함수를 사용하면 원하는 시간 옵션을 선택 할 수 있습니다. 

  • toast("Hello") : "Hello" 문자열을 2초간 표시
  • toast("Hello", 1) : "Hello" 문자열을 3.5초간 표시
fun toast(message: String, duration: Int = 0){
  var durationTime = Toast.LENGTH_SHORT
  if(duration != 0) durationTime = Toast.LENGTH_LONG
  Toast.makeText(this, message, durationTime).show()
}

 

전역 함수로 사용1 : Activity 에서만 호출 하는 경우

안드로이드 프로그래밍을 하다보면 Activity, Fragment를 포함하여 다양한 클래스 파일이 존재하기 떄문에, 토스트 알림을 전역 함수로 사용 할 수 있으면 편리합니다. 아래의 코드는 Activity Class에서만 전역적으로 처리 할 수 있는 방법입니다. 코틀린 전역 함수를 만들기 위해 아래 그림과 같이 Kotlin 파일을 생성합니다(클래스가 아님). 저는 Global 이라는 파일명으로 파일을 생성하였습니다.

코틀린 코드 파일 생성

생성된 코틀린 파일(Global.kt)에 아래와 같이 코드를 작성합니다. 

// Global.kt 코드

package com.blacklog.toast

import android.content.Context
import android.widget.Toast

fun toast(context: Context, message: String, duration: Int = 0){
    var durationTime = Toast.LENGTH_SHORT
    if(duration != 0) durationTime = Toast.LENGTH_LONG
    Toast.makeText(context, message, durationTime).show()
}

이와 같이 전역 함수를 설정완료하면, MainActivity와 같이 Context를 가지는 클래스에서 아래와 같이 토스트 출력 함수를 호출 할 수 있습니다.

  • toast(this, "Hello World!") : 메세지 표시 지속시간 2초
  • toast(this, "Hello World!", 1)  : 메세지 표시 지속시간 3.5초

이 방법은 꼭 toast 뿐만아니라, Kotlin 언어에서 사용 할 수 있는 전역 함수를 만드는 방법입니다. Java는 모든 메서드가 클래스 안에 존재해야 하지만, Kotlin은 Class 외부에도 함수 선언이 가능합니다.

 

전역 함수로 사용2 : 모든 클래스에서 사용가능

앱 개발은 실제로 다수의 Activity로 화면을 구성하지 않고, Fragment로 구성하는 방식이 권장되고 사용하기 때문에 위의 방법에서 코드가 수정이 되어야 합니다. Toast.makeText() 메서드는 첫번째 인자로 Context가 사용되기 때문에, 위의 Global.kt 의 toast 함수에서 언제든 Context 인자를 받기 위해 MainApplication 클래스를 생성합니다.

1. MainApplication 클래스 파일 생성

MainApplication Class 생성

생성된 코틀린 파일에 아래와 같이 코드를 입력 합니다. MainApplication 클래스는 Application() 클래스를 상속하고, applicationContext() 메서드는 자신(context)을 반환합니다.

package com.blacklog.toast

import android.app.Application
import android.content.Context

class MainApplication: Application() {
    init{
        instance = this
    }

    companion object{
        private var instance:MainApplication? = null

        fun applicationContext(): Context {
            return instance!!.applicationContext
        }
    }
}

2. AndroidManifest.xml 설정 변경

앱이 실행될 때 사용할 Application 클래스를 위에서 생성한 MainApplication 으로 변경합니다. application 태그에 android:name=".MainApplication" 코드를 추가하면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.blacklog.toast">

    <application
        android:name=".MainApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Toast">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

3. Global.kt 코드 수정

전역 함수 코드를 작성하게 위해 생성한 Global.kt 파일의 toast 함수 코드를 아래와 같이 변경합니다.

package com.blacklog.toast

import android.widget.Toast

fun toast(message: String, duration: Int = 0){
    var durationTime = Toast.LENGTH_SHORT
    if(duration != 0) durationTime = Toast.LENGTH_LONG
    Toast.makeText(MainApplication.applicationContext(), message, durationTime).show()
}

4. 사용하기

위와 같이 MainApplication.kt, AndroidManifest.xml, Global.kt 코드 작성 및 수정을 완료되면, 어느 클래스에서든 아래와 같은 토스트 알림 메세지를 호출 하는 코드를 사용할 수 있습니다.

  • toast("Hello") : "Hello" 문자열을 2초간 표시
  • toast("Hello", 1) : "Hello" 문자열을 3.5초간 표시

기타 : Anko 라이브러리

Kotlin 언어를 사용하는 경우 Anko 라이브러리를 사용할 수 있습니다. Anko 라이브러리 사용법은 추후에 따로 작성할 예정입니다. Anko 라이브러리를 사용하면 아래와 같이 간단하게 토스트 메세지를 출력 할 수 있습니다.

  • toast("Hello World") : "Hello World" 메세지 지속시간 2초
  • longToast("Hello World") : "Hello World" 메세지 지속시간 3.5초

끝까지 읽어 주셔서 감사합니다.

관련포스트

🤞 안드로이드(코틀린) 앱 제작하기 관련글 목록 보기

🤞 안드로이드(코틀린) 팝업, 다이얼로그 관련글 목록 보기