◆ 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 件のコメント:
コメントを投稿