본문 바로가기
Android/Concepts

Toast 사용법 + Snackbar

by JuHy_ 2019. 8. 2.

Toast란?

Toast란 애플리케이션 위에 잠깐 떠있다 사라지는 뷰로서 간단한 메시지를 보여주기 위해 사용된다.

기본적으로 화면 하단에 나타나지만 위치뿐만 아니라 색상, 모양 등을 바꾸어 사용할 수도 있다.

 

기본적인 사용법

//기본 형태
Toast toast = Toast.makeText(getApplicationContext(), "Android Toast", Toast.LENGTH_SHORT);
toast.show();

//자주 쓰는 형태
Toast.makeText(getApplicationContext(), "Android Toast", Toast.LENGTH_SHORT).show();

기본적으로 Toast 클래스의 makeText() 함수를 통해 원하는 toast 객체를 만들어 show() 함수를 통해 띄우는 형태이다.

 

먼저 객체를 만들어야 하는데, 이 때 makeText 함수에는 3개의 파라미터를 넘겨주어야 한다.

첫 번째는 Application의 Context로 this나 getApplicationContext() 함수를 통해 넣어준다.

두 번째는 띄우려는 메시지로 String 형태로 넣어준다.

세 번째는 띄우고 싶은 시간으로 Toast.LENGTH_SHORT, Toast.LENGTH_LONG 중 원하는 것을 넣어준다.

 

이렇게 toast 객체를 만들었으면 원하는 때에 show() 함수를 통해 보여주면 된다.

 

간단하게 사용할 때는 객체를 따로 변수에 담지않고 대개 Toast.makeText().show()와 같이 하나로 묶어 사용한다.

 

위치 바꾸기

Toast toast = Toast.makeText(getApplicationContext(), "Android Toast", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.LEFT, 200, 200);
toast.show();

위치 변경은 toast 객체의 setGravity를 통해 할 수 있다.

setGravity 함수는 정렬 위치와 x축, y축 offset을 넘겨주어야 한다.

위의 코드를 예를 들면 좌측 상단에서 x축으로 200, y축으로 200만큼 떨어진 곳에 띄우겠다는 뜻이다.

 

모양 바꾸기

Toast 모양을 기본 모양이 아니라 다른 형태로 보여주고 싶다면 새로 형태를 만들기 위한 layout을 만들어야 한다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/toast_layout_root">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/toast"
        android:padding="20dp"
        android:textSize="40sp"/>

</LinearLayout>

▲ toastborder.xml

먼저 위와 같이 TextView 하나만 들어있는 layout을 만들어 주었다.

메세지를 띄워줄 TextView는 테두리를 만들기 위한 배경과 글자 크기 등을 지정해주었다.

그리고 부모 layout과 TextView를 사용하기 위해 id를 설정해주었다.

 

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toastborder, (ViewGroup)findViewById(R.id.toast_layout_root));
TextView text = layout.findViewById(R.id.text);
text.setText("Custom Toast");

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();

다음으로 Activity로 돌아와서 toast에 모양을 지정해주어야 하는데 이는 setView() 함수를 통해 가능하다.

이 때 setView 안에는 원하는 형태의 view를 넣어주어야 하기 때문에 LayoutInflater를 통해 해당 view를 불러와야 한다.

 

getLayoutInflater()를 통해 inflater를 만들고 inflate() 함수에 원하는 xml 파일과 layout을 findViewById 를 통해 넣는다.

이를 통해 원하는 우리가 원하는 모양의 view를 가져왔고 이를 통해 TextView를 불러와 글자를 설정해주었다.

 

마지막으로 toast 객체를 만들어 setView를 통해 layout을 지정해주어 띄워주면 된다.

※ 꼭 View 형태로 넣어주어야 하기 때문에 text 객체(TextView)가 아닌 layout 객체(View)를 넣어준다.

 

앱을 실행해보면 정상적으로 원하는 형태의 Toast가 나타나는 것을 볼 수 있다.

 

Snackbar

요즘은 Toast 외에도 Snackbar를 많이 사용하기도 하는데 이는 기본 라이브러리가 아니기 때문에 추가해주어야 한다.

 

File - Project Structure - Dependencies - app 에서 + 버튼을 클릭하여 Library Dependency 추가하기를 들어가서

design을 검색하고 com.android.support의 design 라이브러리를 선택한 뒤 OK를 눌러주면 된다.

build.gradle 파일에 dependencies 항목에 com.android.support.design이 implement 된 것을 볼 수 있다.

 

이제 Snackbar를 사용해보자.

 

Snackbar.make(view, "Android Snackbar", Snackbar.LENGTH_SHORT).show();

Snackbar도 Toast와 똑같이 make한 뒤 show() 함수를 통해 사용할 수 있다.

이 때, Toast와 다르게 첫번째 파라미터로 Context를 넣지 않고 View 객체를 넣어주어야 한다.

주로 최상위 레이아웃을 findViewById로 불러와 넣어준다.

또한 duration도 SHORT, LONG 뿐만 아니라 INDEFINITE를 사용하여 없어지지 않도록 할 수도 있다.

 

 

Reference

[부스트코스]안드로이드 프로그래밍

https://www.edwith.org/boostcourse-android

'Android > Concepts' 카테고리의 다른 글

나인패치(Nine Patch) 이미지란?  (0) 2019.08.08
Dialog 사용법 - AlertDialog  (0) 2019.08.02
기본적인 Event 처리 - Touch, Gesture, Key  (0) 2019.08.01
ScrollView 사용법  (0) 2019.07.30
TableLayout 사용법  (0) 2019.07.30