【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);