Register now for Android Dev Summit 2019!

토스트 개요

토스트는 작은 팝업으로 작업에 관한 간단한 피드백을 제공합니다. 메시지에 필요한 공간만 차지하며 진행 중인 활동은 그대로 표시되고 상호작용도 유지됩니다. 토스트는 시간이 초과하면 자동으로 사라집니다.

예를 들어 이메일에서 보내기를 클릭하면 아래의 캡처 화면과 같이 '메시지 보내는 중...'이라는 토스트 메시지가 표시됩니다.

상태 메시지에 대한 사용자의 응답이 필요한 경우 대신 알림을 사용하는 것이 좋습니다.

기본 사항

먼저 Toast 개체를 makeText() 메서드 중 하나를 사용하여 인스턴스화합니다. 이 메서드는 애플리케이션 Context, 텍스트 메시지, 토스트 지속 시간이라는 세 가지 매개변수를 사용하며 올바르게 초기화된 토스트 개체를 반환합니다. 아래 예와 같이 show()를 사용하여 토스트 알림을 표시할 수 있습니다.

Kotlin

    val text = "Hello toast!"
    val duration = Toast.LENGTH_SHORT

    val toast = Toast.makeText(applicationContext, text, duration)
    toast.show()
    

자바

    Context context = getApplicationContext();
    CharSequence text = "Hello toast!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    

이 예는 대부분의 토스트 알림에 필요한 모든 것을 보여주며, 그 밖에 필요한 것은 거의 없습니다. 그러나 토스트를 다르게 배치하거나 단순한 텍스트 메시지 대신 자체 레이아웃을 사용하고 싶을 수 있습니다. 다음 섹션에서는 이를 작업하는 방법을 설명합니다.

다음과 같이 메서드를 연결하여 Toast 개체에 의존하지 않도록 할 수도 있습니다.

Kotlin

    Toast.makeText(context, text, duration).show()
    

자바

    Toast.makeText(context, text, duration).show();
    

토스트 위치 지정

일반적인 토스트 알림은 화면 하단에 표시되며 가로로 가운데 맞춤됩니다. setGravity(int, int, int) 메서드를 사용하여 위치를 변경할 수 있습니다. 여기에서는 Gravity 상수, x 좌표 오프셋, y 좌표 오프셋의 세 가지 매개변수가 허용됩니다.

예를 들어 토스트를 왼쪽 상단에 표시하려면 다음과 같이 Gravity를 설정하면 됩니다.

Kotlin

    toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
    

자바

    toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
    

위치를 오른쪽으로 살짝 이동하려면 두 번째 매개변수의 값을 올리고, 아래로 살짝 이동하려면 마지막 매개변수의 값을 올립니다.

맞춤 토스트 뷰 만들기

단순한 텍스트 메시지로 충분하지 않다면 토스트 알림의 맞춤 레이아웃을 만들 수 있습니다. 맞춤 레이아웃을 만들려면 XML 또는 애플리케이션 코드에서 뷰 레이아웃을 정의하고 루트 View 개체를 setView(View) 메서드로 전달하세요.

다음 스니펫에는 토스트 알림의 맞춤 레이아웃이 포함되어 있습니다(layout/custom_toast.xml로 저장됨).

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_container"
                  android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="8dp"
                  android:background="#DAAA"
                  >
        <ImageView android:src="@drawable/droid"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="8dp"
                   />
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:textColor="#FFF"
                  />
    </LinearLayout>
    

LinearLayout 요소의 ID가 'custom_toast_container'임을 확인하세요. 다음과 같이 이 ID와 XML 레이아웃 파일 'custom_toast'의 ID를 사용하여 레이아웃을 팽창해야 합니다.

Kotlin

    val inflater = layoutInflater
    val container: ViewGroup = findViewById(R.id.custom_toast_container)
    val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "This is a custom toast"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
    

자바

    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.custom_toast,
                    (ViewGroup) findViewById(R.id.custom_toast_container));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("This is a custom toast");

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

먼저 getLayoutInflater()(또는 getSystemService())를 사용하여 LayoutInflater를 검색한 다음 inflate(int, ViewGroup)를 사용하여 XML에서 레이아웃을 팽창합니다. 첫 번째 매개변수는 레이아웃 리소스 ID이고 두 번째는 루트 View입니다. 이 팽창된 레이아웃을 사용하여 레이아웃에서 View 개체를 더 찾을 수 있으므로, 이제 ImageView 및 TextView 요소의 콘텐츠를 캡처하고 정의합니다. 마지막으로 Toast(Context)를 사용하여 새로운 토스트를 만들고 Gravity나 Duration과 같은 토스트의 일부 속성을 설정합니다. 그런 다음 setView(View)를 호출하여 팽창된 레이아웃으로 전달합니다. 이제 show()를 호출하여 맞춤 레이아웃이 적용된 토스트를 표시할 수 있습니다.

참고: setView(View)로 레이아웃을 정의하는 경우가 아니면 토스트에 공개 생성자를 사용하지 마세요. 사용할 맞춤 레이아웃이 없다면 makeText(Context, int, int)를 사용하여 토스트를 만들어야 합니다.