Android 앱을 개발하다 보면 기본으로 제공되는 Toast.LENGTH_LONG보다 더 오랫동안 메시지를 화면에 유지해야 하는 경우가 종종 있습니다. 이번 글에서는 Handler를 활용해 Toast의 표시 시간을 원하는 만큼 자유롭게 조절하는 방법을 단계별로 살펴보겠습니다.
1단계: 새 프로젝트 생성
Android Studio에서 File → New Project를 선택한 후, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.
2단계: 레이아웃 구성하기
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/parent"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:gravity="center"
android:background="#33FFFF00"
android:orientation="vertical">
<TextView
android:id="@+id/text"
android:textSize="18sp"
android:textAlignment="center"
android:text="click to show toast at top"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>위 코드는 TextView 하나로 구성된 간단한 레이아웃입니다. 사용자가 이 TextView를 클릭하면 화면 상단에 Toast가 표시되며, 지정한 시간이 지난 후 자동으로 사라집니다.
3단계: MainActivity 코드 작성하기
src/MainActivity.java 파일에 다음 코드를 추가합니다.
package com.example.andy.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
int view = R.layout.activity_main;
TextView text;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
text = findViewById(R.id.text);
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Toast toast = Toast.makeText(MainActivity.this, "Sample Toast", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 0, 250);
toast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.cancel();
}
}, 50000);
}
});
}
}핵심 원리: Handler로 표시 시간 제어하기
Toast의 표시 시간을 조절하는 핵심은 바로 Handler입니다. 아래 코드처럼 Toast를 화면에 표시한 뒤, 원하는 지연 시간(밀리초)만큼 경과했을 때 cancel() 메서드를 호출하면 됩니다.
final Toast toast = Toast.makeText(MainActivity.this, "Sample Toast", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 0, 250);
toast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.cancel();
}
}, 1000);위 예제에서는 1000밀리초(1초) 후에 Toast가 사라지도록 설정했습니다. 이 지연 시간 값을 늘리면 LENGTH_LONG보다 훨씬 긴 시간 동안도 Toast를 화면에 유지할 수 있으며, 반대로 값을 줄이면 더 짧게 표시할 수도 있습니다.
앱 실행 및 결과 확인
실제 Android 기기를 컴퓨터에 연결한 상태에서, Android Studio로 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 Run 아이콘을 클릭합니다. 실행 옵션에서 실제 모바일 기기를 선택하면 앱이 설치되고 아래와 같은 기본 화면이 표시됩니다.

초기 화면에서 TextView를 클릭하면 아래 그림과 같이 Toast가 나타나며, 설정한 시간 동안 화면에 유지됩니다.
