【AndroidのViewを制する】 Toastを使いこなしてViewを一定時間表示する
今回、紹介するToastはViewを画面下からスライドインさせることができます。
スライドインしたViewは一定時間が経過すると自動で消えます。
ユーザーに簡単な情報を提示することができます。
今回はViewを表示する方法に関連するメソッドを説明します。
Toast#setView・Toast#getViewを使ってViewを設定させる
Toast#setViewはToastで表示するViewを設定するメソッドです。Toast#getViewは現在設定されているViewを返却するメソッドです。
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
Button setViewButton = new Button(this);
setViewButton.setText("setViewでViewを設定");
setViewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ImageViewをToast表示する
ImageView imageView = new ImageView(ToastActivity.this);
imageView.setImageResource(R.mipmap.ic_launcher);
Toast toast = new Toast(ToastActivity.this);
toast.setView(imageView);
toast.show();
}
});
linearLayout.addView(setViewButton);
setContentView(linearLayout);
Toast#setGravityを使い表示位置を変更する
Toast#setGravityはToastの表示位置を変更するメソッドです。引数は3つあります。
- 第1引数 : Gravityを指定します。
- 第2引数 : x軸方向のオフセット値を設定します。正の値で右方向、負の値で左方向に表示位置がずれます。
- 第3引数 : y軸方向のオフセット値を設定します。正の値で下方向、負の値で上方向に表示位置がずれます。
Toast#getXOffsetは設定されているx軸方向のオフセット値を返却します。
Toast#getYOffsetは設定されているy軸方向のオフセット値を返却します。
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
Button setGravityButton = new Button(this);
setGravityButton.setText("setGravityで表示位置を設定");
setGravityButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView imageView = new ImageView(ToastActivity.this);
imageView.setImageResource(R.mipmap.ic_launcher);
Toast toast = new Toast(ToastActivity.this);
toast.setView(imageView);
// グラビティを画面中央に設定し、そこからx軸方向に500、y軸方向に100のオフセットを設定する。
toast.setGravity(Gravity.CENTER , 500 ,100);
toast.show();
}
});
linearLayout.addView(setGravityButton);
setContentView(linearLayout);
Toast#setMarginを使ってToastの表示位置を変更する
Toast#setMarginはToastの表示位置を変更するメソッドです。引数は2つあります。
- 第1引数 : 水平方向のマージンを指定します。数値は-1~1の間で設定できます。正の値は水平右方向、負の値は水平左方向に移動されます。
- 第2引数 : 垂直方向のマージンを指定します。数値は-1~1の間で設定できます。正の値は垂直上方向、負の値は垂直下方向に移動されます。
Toast#getVerticalMarginは設定されている垂直方向のマージンを返却します。
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
Button setMarginButton = new Button(this);
setMarginButton.setText("setMarginで表示位置を設定");
setMarginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView imageView = new ImageView(ToastActivity.this);
imageView.setImageResource(R.mipmap.ic_launcher);
Toast toast = new Toast(ToastActivity.this);
toast.setView(imageView);
/**
* 第1引数 : 水平方向のマージンを指定します。数値は-1~1の間で設定できます。正の値は水平右方向、負の値は水平左方向に移動されます。
* 第2引数 : 垂直方向のマージンを指定します。数値は-1~1の間で設定できます。正の値は垂直上方向、負の値は垂直下方向に移動されます。
*/
toast.setMargin(1.0f,-1.0f);
toast.show();
}
});
linearLayout.addView(setMarginButton);
setContentView(linearLayout);
Toast#setDurationを使って表示時間を変更する
Toast#setDurationはToastの表示時間を変更するメソッドです。Toastクラスの定数として定義されている「LENGTH_SHORT」と「LENGTH_LONG」を引数として使うことができます。 Toast#getDurationは設定されている表示時間を返却します。
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
Button setDurationButton = new Button(this);
setDurationButton.setText("setDurationで表示時間を設定");
setDurationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Random random = new Random();
boolean isLong = random.nextBoolean();
Toast toast = Toast.makeText(ToastActivity.this, "", Toast.LENGTH_SHORT);
if(isLong) {
toast.setText("Toast.LENGTH_LONGで表示");
// 5秒間表示される
toast.setDuration(Toast.LENGTH_LONG);
} else {
toast.setText("Toast.LENGTH_SHORTで表示");
// 1秒間表示される
toast.setDuration(Toast.LENGTH_SHORT);
}
toast.show();
}
});
linearLayout.addView(setDurationButton);
setContentView(linearLayout);
ToastにButtonを設定するとどうなるのか
ToastにButtonを設定してButtonが押せるかどうかを確認しました。結果は押すことができませんでした。
これはToast内のWindowManager.LayoutParamsにFLAG_NOT_TOUCHABLEのフラグが設定されているためです。
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
Button setButtonViewButton = new Button(this);
setButtonViewButton.setText("Toastにボタンを配置するとどうなるのか");
setButtonViewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button button = new Button(ToastActivity.this);
button.setText("Toastの中のボタン");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ToastActivity.this , "Toastの中のボタンが押されたよ" ,Toast.LENGTH_LONG);
}
});
Toast toast = new Toast(ToastActivity.this);
toast.setView(button);
toast.show();
}
});
linearLayout.addView(setButtonViewButton);
setContentView(linearLayout);