Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidのToastをLENGTH_LONGより長く表示する方法


Toast.LENGTH_LONGより長く表示したいとき

AndroidのToastは、標準ではToast.LENGTH_SHORT(約2秒)かToast.LENGTH_LONG(約3.5秒)のどちらかしか選べません。しかし開発を進めていると、もう少し長い時間メッセージを表示したいケースが出てきます。

この記事では、HandlerのpostDelayed()を組み合わせてToastの表示時間を自由にコントロールする方法を、サンプルコード付きでわかりやすく解説します。

実装手順

ステップ1:新規プロジェクトを作成する

Android Studioで「File」→「New Project」を選択し、必要な項目を入力して新しいプロジェクトを作成します。

ステップ2:レイアウトファイル(res/layout/activity_main.xml)

以下のコードを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が1つ配置されています。ユーザーがこのテキストをタップすると、カスタムした時間だけToastが画面上部に表示される仕組みです。

ステップ3:MainActivity.java

続いて、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();
                    }
                }, 5000);
            }
        });
    }
}

ポイント解説:表示時間をコントロールする仕組み

今回の実装の核となるのは、次の部分です。

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();
    }
}, 5000);

Toastを生成してshow()で表示した後、HandlerのpostDelayed()に「キャンセルまでのミリ秒」とcancel()の処理を渡しています。この例では5000ミリ秒(5秒)後にToastをキャンセルするため、通常のLENGTH_LONG(約3.5秒)よりも長く表示されます。この数値を変更すれば、10秒でも30秒でも、好きな時間だけ表示を継続できます。

動作確認

それではアプリを実行してみましょう。実機のAndroidスマートフォンをPCに接続しておいてください。Android Studioでプロジェクトのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続したデバイスを選択すると、端末に次のような初期画面が表示されます。

AndroidのToastをLENGTH_LONGより長く表示する方法

画面中央のテキストをタップすると、画面上部にToastが表示されます。postDelayed()で指定した時間(この例では5秒)が経過するまで、Toastは消えずに表示され続けます。

AndroidのToastをLENGTH_LONGより長く表示する方法

注意点・補足

  • Android 11(API 30)以降の制限: targetSdkVersion 30以上のアプリでは、テキスト形式のToastに対するsetGravity()やsetMargin()は効果がなくなります。表示位置を細かく制御したい場合は、Snackbarやカスタムダイアログの利用を検討しましょう。
  • 長時間の告知には別のUIも有効: 数十秒単位でユーザーへ情報を伝えたいケースでは、アクションボタンを持たせられるSnackbarやシステム通知の方が適していることもあります。
  • Kotlinで実装する場合: コルーチンのdelay()を使えば、Handlerなしで同等の処理をより簡潔に書けます。

まとめ

Toastの標準表示時間はLENGTH_SHORT/LENGTH_LONGの2択ですが、Toastインスタンスへの参照を保持し、Handler#postDelayed()で任意のタイミングでcancel()を呼び出せば、実質的に好きな長さだけToastを表示できます。シンプルで応用範囲の広いテクニックなので、ぜひ覚えておきましょう。

  1. 【Android開発】Switchウィジェットのスタイルをカスタマイズする方法を徹底解説

    Android Switchウィジェットのスタイルをカスタマイズする方法 このチュートリアルでは、AndroidアプリのSwitch(スイッチ)ウィジェットの見た目を自由にカスタマイズする方法を紹介します。thumb(つまみ)とtrack(レール)に独自のDrawableを指定することで、ON/OFFの状態に応じてデザインが切り替わるオリジナルスイッチを作成できます。 ステップ1:新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成しましょう。 ステップ2:レイアウトフ

  2. AndroidでFaceTimeは使える?参加方法とおすすめ代替アプリ5選

    Apple純正のビデオ通話アプリ「FaceTime(フェイスタイム)」は、iPhone、iPad、Mac(Apple Watchでも音声通話に対応)などAppleデバイス同士を瞬時につなげられることから、多くのユーザーに愛用されています。高画質な映像、クリアな音声、簡単な接続性、そして何よりも高いセキュリティ性こそが、FaceTimeが多くの人に選ばれる理由です。その人気の高さゆえに、「AndroidでもFaceTimeを使えるの?」と疑問に思うAndroidユーザーも少なくありません。この記事では、その答えと、Androidで使えるおすすめの代替アプリを詳しくご紹介します。 Androidで