来源: Android自定义toast – 飞天小鳄 – 博客园
在开发Android应用时,一般我们都会用toast来弹出提示消息,简单高 效。但是在不同的手机下toast显示的位置和样式可能会不同,而且系统自带的toast样式奇丑(个人觉得…),那么怎样定制一个个性的toast 提示框呢。。。 今天我就分享一下自己写的自定义toast,不足之处还请大家多多指点。(后边有效果图)
1、因为toast的特性,所以我们定义toast为单例模式。
<span class="tag"><div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"cnblogs_code_toolbar"</span><span class="tag">><span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"cnblogs_code_copy"</span><span class="tag">><a</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"复制代码"</span><span class="tag">><img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://www.mikel.cn/wp-content/uploads/2015/05/copycode4.gif"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"复制代码"</span><span class="pln"> </span><span class="tag">/></a></span></div></span><span class="pln"> </span><span class="tag"><pre></span><span class="pln">private static ZToast instance; //单例的 private View mToastView;//自定义toast view private TextView mTextView; private Boolean mIsShow;//记录状态 是否在显示 private Timer mTimer;//定时器 public synchronized static ZToast getInstance(Context context) { if (instance == null) instance = new ZToast(context); return instance; } private ZToast(Context context) { mIsShow = false;// 记录当前Toast的内容是否已经在显示 //这里初始化toast view mToastView = LayoutInflater.from(context).inflate(R.layout.common_toast, null); //用来提示的文字 mTextView = ((TextView) mToastView.findViewById(R.id.toast_text)); //初始化计数器 mTimer = new Timer(); // 设置布局参数 setParams(); } </span> |
2、接着设置布局样式:
<span class="pln"> </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">LayoutParams</span><span class="pln"> mParams</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> setParams</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> mParams </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">WindowManager</span><span class="pun">.</span><span class="typ">LayoutParams</span><span class="pun">();</span><span class="com">//初始化</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">height </span><span class="pun">=</span><span class="pln"> </span><span class="typ">WindowManager</span><span class="pun">.</span><span class="typ">LayoutParams</span><span class="pun">.</span><span class="pln">WRAP_CONTENT</span><span class="pun">;</span><span class="pln"> </span><span class="com">//高</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">width </span><span class="pun">=</span><span class="pln"> </span><span class="typ">WindowManager</span><span class="pun">.</span><span class="typ">LayoutParams</span><span class="pun">.</span><span class="pln">WRAP_CONTENT</span><span class="pun">;</span><span class="pln"> </span><span class="com">//宽</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">format </span><span class="pun">=</span><span class="pln"> </span><span class="typ">PixelFormat</span><span class="pun">.</span><span class="pln">TRANSLUCENT</span><span class="pun">;</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">windowAnimations </span><span class="pun">=</span><span class="pln"> R</span><span class="pun">.</span><span class="pln">style</span><span class="pun">.</span><span class="pln">custom_animation_toast</span><span class="pun">;</span><span class="com">// 设置进入退出动画效果</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">WindowManager</span><span class="pun">.</span><span class="typ">LayoutParams</span><span class="pun">.</span><span class="pln">TYPE_TOAST</span><span class="pun">;</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">flags </span><span class="pun">=</span><span class="pln"> </span><span class="typ">WindowManager</span><span class="pun">.</span><span class="typ">LayoutParams</span><span class="pun">.</span><span class="pln">FLAG_KEEP_SCREEN_ON </span><span class="pun">|</span><span class="pln"> </span><span class="typ">WindowManager</span><span class="pun">.</span><span class="typ">LayoutParams</span><span class="pun">.</span><span class="pln">FLAG_NOT_FOCUSABLE </span><span class="pun">|</span><span class="pln"> </span><span class="typ">WindowManager</span><span class="pun">.</span><span class="typ">LayoutParams</span><span class="pun">.</span><span class="pln">FLAG_NOT_TOUCHABLE</span><span class="pun">;</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">gravity </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Gravity</span><span class="pun">.</span><span class="pln">BOTTOM</span><span class="pun">;</span><span class="pln"> </span><span class="com">//对其方式</span><span class="pln"> mParams</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">45</span><span class="pun">;</span><span class="pln"> </span><span class="com">//下间距</span><span class="pln"> </span><span class="pun">}</span> |
3、自定义toast弹出风格 动画的效果 。 toast_styles.xml
< span class = "tag" ></ pre ></ span >< span class = "pln" > </ span >< span class = "tag" >< pre ></ span >< span class = "pln" ><?xml version="1.0" encoding="utf-8"?> <resources> <style name="custom.animation.toast" parent="@android:style/Animation.Toast"> <item name="android:windowEnterAnimation">@anim/toast_enter</item> <item name="android:windowExitAnimation">@anim/toast_exit</item> </style> </resources></ span >< span class = "tag" ></ pre ></ span >< span class = "pln" > </ span >< span class = "tag" >< div </span>< span class = "pln" > </ span >< span class = "atn" >class</ span >< span class = "pun" >=</ span >< span class = "atv" >"cnblogs_code_toolbar"</ span >< span class = "tag" >>< span </span>< span class = "pln" > </ span >< span class = "atn" >class</ span >< span class = "pun" >=</ span >< span class = "atv" >"cnblogs_code_copy"</ span >< span class = "tag" >>< a </span>< span class = "pln" > </ span >< span class = "atn" >title</ span >< span class = "pun" >=</ span >< span class = "atv" >"复制代码"</ span >< span class = "tag" >>< img </span>< span class = "pln" > </ span >< span class = "atn" >src</ span >< span class = "pun" >=</ span >< span class = "atv" >"http://www.mikel.cn/wp-content/uploads/2015/05/copycode4.gif"</ span >< span class = "pln" > </ span >< span class = "atn" >alt</ span >< span class = "pun" >=</ span >< span class = "atv" >"复制代码"</ span >< span class = "pln" > </ span >< span class = "tag" >/></ a ></ span ></ span > |