화면에 간단히 뿌려지는 정보를 보고 싶은 경우 토스트 메시지를 사용한다.
토스트 메시지를 만들어서 보여주는 전형적인 방법은 다음과 같다.
Toast.makeText(Context context, String message, int duration).show();
버튼을 눌렀을 때 모양이 다른 토스트 메시지를 띄우도록 만들어보자.
버튼의 클릭 이벤트에 설정할 메소드를 다음과 같이 작성하였다.
public void onButton1Clicked(View view){
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toastborder, (ViewGroup) findViewById(R.id.toast_layout_root));
TextView text = layout.findViewById(R.id.textView);
text.setText("모양 바꾼 토스트");
Toast toast = new Toast(this);
toast.setGravity(Gravity.CENTER, 0, -100);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
}
먼저 LayoutInflater 객체를 사용해 XML로 정의된 레이아웃(toastborder.xml)을 메모리에 객체화하였다.
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toastborder, (ViewGroup) findViewById(R.id.toast_layout_root));
toastborder.xml 파일은 다음과 같이 만들었다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/toast"
android:padding="20dp"
android:text="TextView"
android:textSize="32sp" />
</LinearLayout>
토스트 뷰에 메시지를 띄우기 위한 TextView가 정의되어 있다.
배경으로 지정된 toast.xml 이미지 파일은 셰이프 드로어블로 다음과 같이 만들었다.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="4dp"
android:color="#ffffff00"
/>
<solid
android:color="#ff883300"
/>
<padding
android:left="20dp"
android:top="20dp"
android:bottom="20dp"
android:right="20dp"
/>
<corners
android:radius="15dp"
/>
</shape>
다시 MainActivity로 돌아와 코드를 보자.
먼저 LayoutInflater 객체로 객체화한 toastborder.xml의 TextView를 객체화한 후 표시할 문자를 설정한다.
TextView text = layout.findViewById(R.id.textView);
text.setText("모양 바꾼 토스트");
그 후 Toast를 객체화하고, setGravity(), setDuration()등의 메소드를 사용해 Toast의 위치 등을 설정한다. 여기선 사용하지 않았지만 setMargin()을 통해 여백을 지정할 수도 있다.
setView() 메소드로 위에서 객체화한 toastborder()의 레이아웃을 설정해주고,
show(),메소드로 Toast 메시지를 표시한다.
Toast toast = new Toast(this);
toast.setGravity(Gravity.CENTER, 0, -100);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
간단한 메시지를 보여줄 때 토스트 대신 스낵바를 사용하는 경우도 많다.
스낵바는 화면 아래에서 올라오는 메시지이다.
스낵바는 다음과 같은 방법으로 만들 수 있다.
public void onButton2Clicked(View view){
Snackbar.make(view, "스낵바", Snackbar.LENGTH_LONG).show();
}