티스토리 뷰

반응형

Ⅰ. Toast 메시지 코드 살펴보기

 

Toast 메시지를 띄우기 위한 코드를 살펴보면

 

Java

Toast.makeText(getApplicationContext(), "Hello, World!", Toast.LENGTH_LONG).show();

Kotlin

Toast.makeText(applicationContext, "Hello, World!", Toast.LENGTH_LONG).show()

위와 같이 코드를 작성하여 메시지를 띄울 수 있습니다.

 

 

 

Ⅱ. Toast 메세지 짧게 보여줄지 길게 보여줄지 설정하기

 

긴 Toast 메세지

Toast.makeText(applicationContext, "Hello, World!", Toast.LENGTH_LONG).show()

짧은 Toast 메시지

Toast.makeText(applicationContext, "Hello, World!", Toast.LENGTH_SHORT).show()

출력하고 싶은 text , 다음에 있는 Toast.LENGTH_를 LONG으로 할지 SHORT로 할지 선택해주시면 됩니다.

 

 

 

Ⅲ. 안드로이드 스튜디오로 Toast 메시지 띄어보기

 

XML 코드

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    <Button
            android:text="Toast Button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ShowToastButton"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
    />
</androidx.constraintlayout.widget.ConstraintLayout>

Kotlin 코드

package com.example.toastexample

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ShowToastButton.setOnClickListener {
            Toast.makeText(applicationContext, "버튼이 눌렸습니다.", Toast.LENGTH_LONG).show()
        }

    }
}

 

간단하게 Toast 예제를 확인해 볼 수 있습니다.

 

Ⅳ. Toast 메시지 function, class로 작성하기

 

function

 

function을 사용하는 이유는 Toast 메시지를 한번 띄우는 게 아니라 여러 번 띄울 때 똑같은 코드를 불필요하게 또 사용하지 않게 하기 위함입니다.

 

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ShowToastButton.setOnClickListener {
            ShowToast("버튼이 눌렸습니다.")
        }
    }

    fun ShowToast(message: String) {
        Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
    }
}

매개변수 message를 String으로 받아와서 Toast 메시지로 띄워주는 예제입니다.

 

class

 

Toast 메시지를 class로 작성하여 보여주고자 할 때 class로 코드를 작성하게 되면

//ShowToast.kt
class ShowToast {
    fun LongToast(message: String) {
        Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
    }

    fun ShortToast(message: String) {
        Toast.makeText(applicationContext, message, Toast.LENGTH_SHORT).show()
    }
}

다음과 같이 작성을 할 수 있습니다. 하지만 applicationContext부분에서 에러가 생길 것입니다.

applicationContext는 Activity에서 정의되어 있어서 ShowToast 클래스는 Activity를 상속받지 않아 사용할 수 없습니다.

하지만 Activity를 상속받도록 하면 Toast메시지를 띄울 때마다 Activity를 계속 생성하게 되어 불필요한 메모리를 사용하게 됩니다.

 

Application 클래스를 상속받는 클래스를 만들고 해당 클래스에서 applicationContext를 제공하면 해결이 가능합니다.

 

 

Application 클래스를 상속받는 MainApplication 클래스

//MainApplication.kt
open class MainApplication: Application() {

    companion object {
        lateinit var instance: MainApplication
        private set
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
    }
}

ShowToast 클래스에서 MainApplication 클래스를 상속받기 위해 class 앞에 open을 붙여줍니다.

 

앱이 실행될 때 사용할 Application 클래스를 바꾸려면 AndroidManifest.xml 파일에 android:name=". class이름"을 추가해주면 됩니다.

<!-- AndroidManifest.xml -->
<application
            android:name=".MainApplication"
            ...
>

 

수정된 Toast 메시지 함수를 가지고 있는 ShowToast 클래스

 

Java에서는 static 메서드를 선언하여 다른 클래스에서 메서드를 사용할 수 있습니다.

정적 메서드만 모아둔 클래스를 "정적 유틸리티 클래스"라고 합니다.

하지만 코틀린에는 static이 없고 대신에 top-level function을 통하여 같은 효과를 낼 수 있습니다.

companion object를 사용하면 코틀린에서 클래스 이름으로 함수를 호출할 수 있습니다.

 

//ShowToast.kt
class ShowToast {
    companion object {
        fun LongToast(message: String) {
            Toast.makeText(MainApplication.instance, message, Toast.LENGTH_LONG).show()
        }

        fun ShortToast(message: String) {
            Toast.makeText(MainApplication.instance, message, Toast.LENGTH_SHORT).show()
        }
    }
}

이제 불필요하게 메모리를 사용할 필요가 없어졌습니다.

 

이제 모든 클래스에서 Toast 메시지를 띄울 때 아래와 같이 코드를 작성하면 됩니다.

ShowToast.LongToast("첫번째 버튼입니다.")

 

 

 

Ⅴ. Anko 라이브러리로 Toast 메시지 띄우기

 

Kotlin에도 Java처럼 사람들이 편리하게 사용할 수 있게 하는 라이브러리가 있습니다.

많은 라이브러리 중에 Anko 라이브러리로 Toast 메시지를 띄워보려고 합니다.

 

먼저 Anko 라이브러리를 사용하기 위해 코드를 추가해 줍니다.

 

Module 기반 build.gradle

dependencies {
	implementation "org.jetbrains.anko:anko:$anko_version"
    ...
}

 

Project 기반 build.gradle

buildscript {
	ext.anko_version='0.10.8'
    ...
}

 

Anko 라이브러리 르 사용 안 했을 때의 Toast 메시지와 사용했을 때를 비교해보겠습니다.

 

사용 X

Toast.makeText(applicationContext, "Hello, World!", Toast.LENGTH_LONG).show()

사용 O

toast("Hello, World!")

위와 같이 Anko 라이브러리를 사용하여 코드를 보기 쉽게 할 뿐만 아니라 편하게 쓸 수 있습니다.

Anko 라이브러리는 Toast 메시지뿐만 아니라 암시적 인텐트에서도 편하게 사용할 수 있습니다.

Anko 라이브러리에 대해서는 다음에 설명을 해드리겠습니다.

 

Kotlin Github에 Anko 라이브러리에 대해 나와 있으니 참고해보시길 바랍니다.

 

https://github.com/Kotlin/anko

반응형
댓글