2013年2月10日日曜日

Toastをちょっとだけカスタマイズ

AndroidアプリでおなじみのToast、画面の下に出てくるやつね。
使い方はとっても簡単。

public void onClick(View v) {
 Toast.makeText(v.getContext(), "これがToastだ!", Toast.LENGTH_LONG).show();
}

簡単だけど…表示されても見えないんだよね。
私には見えなかったよ。自分で作ってるから、いつ何が表示されるのか知ってるのに見えなかったんだ。これ…使えないよね。

そんなわけで、Googleで「Toast カスタマイズ」って検索すると色々な人がToastのカスタマイズ方法を紹介してるんだけど…

カスタムレイアウトのファイルを作るとか? LayoutInflaterでViewを作るとか?

ただ色がおかしいのを直したいだけなのに、そんな面倒なことしなくていいと思うんだよね。というわけで、私はもう少し簡単に書いておくよ。

public void onClick(View v) {
 Toast t = Toast.makeText(v.getContext(), "これがToastだ!", Toast.LENGTH_LONG);
 View v = t.getView();
 v.setBackgroundColor(Color.rgb(0x20, 0xA0, 0xD0));
 t.show();
}

Viewの背景色を変えるだけ。
標準のToastと比べてみると、サイズもちょっと大きくなる。標準のToastはshapeで影を表示してると思うんだけど、それを背景色の設定で上書きしちゃったのかな。

ま、私にはこれで十分。レイアウト作らなくていいし。最悪Android側が仕様変更になっても、標準状態で表示されたらそれでいいし。

でも、もし標準のToastの色が変更されて、文字の色も変わったら…

気になることは一応確認しておかないとね。手抜きコードで文字の色を変更してみるよ。

public void onClick(View v) {
 Toast t = Toast.makeText(ctx, "これがToastだ!", duration);
 View v = t.getView();
 v.setBackgroundColor(Color.rgb(0x20, 0xA0, 0xD0));
 if (v instanceof ViewGroup) {
  ViewGroup g = (ViewGroup)v;
  for (int i = 0; i < g.getChildCount(); i++) {
   View c = g.getChildAt(i);
   if (c instanceof TextView) {
    ((TextView) c).setTextColor(Color.BLACK);
   }
  }
 }
 t.show();
}

まぁいいんじゃないかな。やっぱり私には、背景色の変更だけで十分だよ。