◆ Toastでメッセージを表示する
Toastはメッセージを表示すると、一定時間が経過すると、メッセージは自動的に消えます。表示するときはフェードイン、消える時はフェードアウトします。
表示する期間(時間)は2秒または4秒です。短いメッセージは2秒でも読めるかもしれませんが、長くなると2秒では読めないかもしれませんので、そういう場合は4秒表示するようにします。
使い方はいたって簡単です。
Toast.makeText(this, "message", Toast.LENGTH_SHORT).show();これで2秒間、メッセージを表示します。4秒表示する場合は、makeText()の第3引数にToast.LENGTH_LONG を指定します。第1引数はコンテキスト、第2引数は表示する文字列を指定します。
サンプルプログラムは前回の「Button」をご覧ください。
◆ Toastのメッセージをキャンセルする
ところでToastを表示している間に、別のToastを表示するとどうなるでしょう?実は1つめのToast表示が終わるまで、2つめのToastは表示されません。
これは都合の悪い場合があります。Toastで表示している間に次の操作を行い、その時もToast表示することになった場合、最初のToast表示が終わるまでに時間がかかってしまいます。何度も繰り返して操作すると、いつまで経ってもToast表示が終わらないかもしれません。
前回の「Button」のサンプルで試してみるとよくわかります。
これを回避するにはcancel()メソッドを使います。「Button」のサンプルをベースに、Toastをキャンセルできるように作り直したものが、今回のサンプルです。
Androidプロジェクトの設定
ToastTest1.java
プロジェクト名: ToastTest1 ビルドターゲット: Android 2.1-update1 アプリケーション名: ToastTest1 パッケージ名: jp.co.triware.samples.ToastTest1 アクティビティーの作成: ToastTest1 最小SDKバージョン: 7
package jp.co.triware.samples.ToastTest1; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class ToastTest1 extends Activity { private static final String TAG = "ToastTest1"; private Toast myToast = null; // Toastをキャンセルするために変数を用意 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Toastのインスタンスを生成し、以後はこれを使用 myToast = Toast.makeText(this, "dummy", Toast.LENGTH_SHORT); // "SHORT"ボタン Button btnShort = (Button)findViewById(R.id.short_btn); btnShort.setOnClickListener(new View.OnClickListener() { // @Override // JDK1.5ではビルドエラー public void onClick(View v) { Log.d(TAG, "[SHORT] button"); // Toastをキャンセル myToast.cancel(); // メッセージと期間をセットして表示 myToast.setText("SHORTボタンが押されました。"); myToast.setDuration(Toast.LENGTH_SHORT); myToast.show(); } }); // "LONG"ボタン Button btnLong = (Button)findViewById(R.id.long_btn); btnLong.setOnClickListener(new View.OnClickListener() { // @Override // JDK1.5ではビルドエラー public void onClick(View v) { Log.d(TAG, "[LONG] button"); // Toastをキャンセル myToast.cancel(); // メッセージと期間をセットして表示 myToast.setText("LONGボタンが押されました。"); myToast.setDuration(Toast.LENGTH_LONG); myToast.show(); } }); // "cancel"ボタン Button btnCancel = (Button)findViewById(R.id.cancel_btn); btnCancel.setOnClickListener(new View.OnClickListener() { // @Override // JDK1.5ではビルドエラー public void onClick(View v) { Log.d(TAG, "[cancel] button"); // Toastをキャンセル myToast.cancel(); } }); } }
Toastをキャンセルするには同じインスタンスである必要があるため、ここではmyToastという変数を使っています。
"SHORT"ボタンや"LONG"ボタンがクリックされた時はキャンセルしてからメッセージを表示します。この時、makeText()メソッドでメッセージを作成すると(インスタンスを作成すると)時間がかかってスムーズに動いてくれませんので、最初にインスタンスは作っておいて、必要に応じてテキストや期間(時間)を変更します。
"cancel"ボタンがクリックされた時は、Toastをキャンセルします。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/short_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SHORT" /> <Button android:id="@+id/long_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="LONG" /> <Button android:id="@+id/cancel_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cancel" /> </LinearLayout>
実行結果
"SHORT"や"LONG"を表示している間に"LONG"や"SHORT"をクリックすると、2秒/4秒表示の完了を待たずに表示が切り替わります(フェードアウト・フェードインする時間はかかります)。"cancel"をクリックするとメッセージ表示が消えます。
0 件のコメント:
コメントを投稿