_/Android

[Android] 토스트(Toast) 메시지 이용하기

suzin 2020. 8. 27. 16:13

안녕하세요 오늘은 토스트(Toast) 메시지를 사용하는 법을 알아보겠습니다. 일단 토스트는 간단한 메시지를 잠깐 보여주었다가 없어지는 뷰입니다. 사용자에게 간단한 메시지를 보여줘야 하는 경우가 생기는데 이때 토스트 메시지를 사용할 수 있습니다.

 

1. 토스트 메시지 생성하고 띄우기

 

토스트 메시지를 만들고 보여주는 방법은 다음과 같습니다.

 

Toast.makeText(Context context, String message, int duration).show()

 

Toast 클래스의 makeText() 메서드를 통해 Toast 객체를 생성합니다. makeText() 메서드의 매개변수 현재 context 정보, 토스트 메시지에 보여줄 문자열, 토스트 메시지의 지속 시간을 파라미터로 전달하여 객체를 생성한 후에 show() 메서드를 호출하여 토스트 알림을 표시합니다.

 

 

<Toast 메시지 지속시간 매개변수 인자값>
Toast.LENGTH_SHORT : Toast 메시지를 짧게 보여줌
Toast.LENGTH_LONG : Toast 메시지를 짧게 보여줌

 

버튼을 누르면 토스트 메시지를 띄우는 간단한 예제입니다.

 

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast toast = Toast.makeText(getApplicationContext(), "토스트 메시지 입니다.", Toast.LENGTH_LONG);
                toast.show();
            }
        });
    }
}

 

 

시작 화면
토스트 띄우기 버튼을 누른 후

 

 

 

2. 토스트 메시지 위치 지정하기

 

다음 두 메서드를 이용해 토스트의 위치와 여백을 지정할 수 있습니다.

 

public void setGravity(int gravity, int xOffset, int yOffset)

 

setGravity() 메서드는 토스트가 보이는 위치를 지정하는데 사용합니다. 첫번째 인자값은 정렬 위치를 지정합니다.

 

 

public void setMargin(float horizontalMargin, float verticalMargin)

 

setMargin() 메서드는 외부 여백을 지정하는데 사용합니다.

 

 

 

 

토스트 위치를 바꿔 토스트 메시지를 띄우는 예제입니다.

 

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast toastView = Toast.makeText(getApplicationContext(), "토스트 메시지 입니다.", Toast.LENGTH_LONG);
                toastView.setGravity(Gravity.TOP|Gravity.LEFT, 400, 1000);
                toastView.show();
            }
        });
    }
}

 

토스트 위치를 바꾼 후 버튼을 눌렀을 때

 

 

 

3. 토스트 모양 바꾸기

 

토스트의 모양을 바꿀 수도 있습니다. 일단 /app/res/layout 폴더에 toastlayout.xml 파일을 만들어 줍니다.

 

 

// toastlayout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_container"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    >

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

</LinearLayout>

 

 

 

TextView의 background는 따로 /app/res/drawable 폴더에 정의해 주었습니다. 

 

 

// toast.xml
shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <stroke
        android:width="3dp"
        android:color="#e5cfe5"
        />

    <solid
        android:color="@color/colorPrimary"
        />

    <corners
        android:radius="10dp"
        />

</shape>

 

// MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
    }
    public void onButtonClicked(View view) {
        LayoutInflater inflater = getLayoutInflater();
        View layout = inflater.inflate(R.layout.toastlayout,
                (ViewGroup) findViewById(R.id.toast_container));

        TextView text = (TextView) layout.findViewById(R.id.text);
        text.setText("모양을 바꾼 토스트");

        Toast toast = new Toast(getApplicationContext());
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(layout);
        toast.show();
    }
}

 

getLayoutInflate()를 사용하여 LayoutInflater를 가져온 다음 inflate(int layout_id, ViewGraup rootView)를 사용하여 XML에서 레이아웃을 확장합니다. 

Toast(Context) 를 이용하여 토스트 객체를 만들고 setView(View)를 호출하여 확장된 레이아웃을 전달합니다.

 

 

버튼을 누른 후