본문 바로가기

프로그래밍/안드로이드

토스트 알림(Toast Notifications)

토스트 알림(Toast Notifications)

토스트 알림은 윈도우 표면(안드로이드 폰 화면)에 나타나는 팝업 메시지 입니다. 토스트 화면은 자동적으로 나타났다가 사라지며 사용자의 이벤트를 받지는 않는 단순 메시지 형태 입니다.



토스트는 서비스에서 생성 및 표시가 가능합니다. 서비스에서 간단한 알림을 사용하고자 할때 현재 보여지는 화면 앞에 나타나게 됩니다. 만약 화면에 보고주고 난뒤 사용자로 부터 이벤트를 받기 원한다면(사용자의 선택을 통한 확인 및 취소 선택) 상태 표시줄 알림을 사용하시기 바랍니다.


토스트(Toast) 기본 사용법


먼저 토스트를 만들기 위해서는 makeText() 메소드중의 하나를 선택하여 토스트 객체를 인스턴스화 시킵니다. 이 메소드는 3개의 매개변수를 요구합니다.

응용 프로그램의 컨텍스트(Context), 보여줄 문자열 메시지(String), 그리고 화면에 나타나는 시간을 매개변수로 넘겨주면 됩니다. 아래 소스를 보시면 이해가 좀더 편하실 겁니다.

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

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

대부분의 토스트는 위와 같은 예제형태로 사용이 됩니다. 하지만 좀 길죠? 아래 처럼 간단한 형태로도 토스트 메시지 사용이 가능합니다.

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


토스트(Toast)가 나타나는 위치

기본적으로 토스트는 화면의 하단, 중간에 나타납니다. 하지만 setGravity(int, int, int)메소드를 사용하여 토스트가 나타나는 화면의 위치를 제어할 수 있습니다. 각각의 매개변수는 정렬, X좌표, Y좌표 요렇게 3가지를 요구하게 되죠.

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

위의 예제는 토스트가 좌측 상단에 나타나게 됩니다. 만약에 좀더 좌측으로 가고 싶다면 두번째 매개변수인 X좌표의 값을 주게 되면 오른쪽으로 좀더 움직이게 되고 아래쪽으로 좀더 이동하고 싶다면 3번째 매개변수인 Y좌표에 값을 주면 됩니다.


사용자 정의 토스트(Toast) 뷰(View)

기본적으로 제공되는 토스트가 맘에 들지 않는다면 원하는 모양대로 사용자가 꾸며서 나타낼 수 있습니다. 사용자 정의 뷰라고도 하는데요. 원하는 모양을 xml로 작성한 후에 토스트의 setView() 메소드를 통해 적용이 가능합니다. 예를 들어 아래 그림 처럼 좌측 이미지와 우측 텍스트를 나타내고 싶다면 다음과 같이 코딩하시면 됩니다.

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

LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root)); ImageView image = (ImageView) layout.findViewById(R.id.image); image.setImageResource(R.drawable.android); TextView text = (TextView) layout.findViewById(R.id.text); text.setText("Hello! 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();

먼저  getLayoutInfloater()메소드를 사용하여 xml로 작성된 레이아웃을 적용하기 위해 뻥티기를 시킵니다. 첫번째 매개변수는 사용할 레이아웃의 ID값이며 두번째는 루트뷰 입니다. 

그런 다음 토스트 객체를 만들고 정렬( setGravity() ), 보여지는 시간( setDuration() ), 적용할 레이아웃 ( setView() )을 적용한 뒤에 화면에 보여주기( show() )를 호출하시면 됩니다.


참고 1]

안드로이드에서는 왠만하면 토스트를 사용할때 생성자를 통해 사용하지 말라고 합니다. 여러분들이 원하는 레이아웃이아닌 시스템에서 제공되는 간단한 메시지를 노출하고 싶다면 그냥 makeText() 메소드를 사용하라고 권장하고 있습니다.

궁금하신 사항이 있으시면 방명록 에다가 문의사항을 남겨 주세요.^^

 

출처 : http://developer.android.com/guide/topics/ui/notifiers/toasts.html