Toastの文字色を変える
AndroidのToast(トースト)は、応答操作の必要が無い通知に最適な機能であり、とても重宝するのだが、例えば文字色を変えたいなどのちょっとした変更にも対応できないので、以下のようなコードが必要になる。
- Bad Knowhow?
//Toastの文字色を変える public static Toast bakeToast(Context context, CharSequence text, int duration, int color) { Toast toast = Toast.makeText(context, text, duration); View v = toast.getView();if ( v != null && v instanceof TextView) { ((TextView)v).setTextColor(color); } elseif ( v != null && v instanceof ViewGroup) { View nextFocus = ((ViewGroup)v).getChildAt(0); //0番目で決め打ちってのがださい。トラバースすべき。 if ( nextFocus != null && nextFocus instanceof TextView) { ((TextView)nextFocus).setTextColor(color); }}return toast; }
正直、これはあまりスマートな方法ではない。
本来であればToastクラスを拡張するか、又はToast#getViewメソッドで取得できるトップレベルビュー(LinearLayout)に新たなビューを流し込むことで表題の機能は実現すべきなのだろう。
Creating Toast Notifications Android Developers
内部のTextViewを公開してくれるだけで凄く楽になるんだけどな。
追記:
現在のSDKならば、getViewではViewGroupが戻ってくるのが確実なので、前半のView判定はいらないか。