自定义Toast
效果图
类
package kong.qingwei.sharedPreferences;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
public class KqwToast implements OnClickListener {
// 上下文
private Context mContext;
private WindowManager mWindowManager;
private View mKqwToast;
private WindowManager.LayoutParams mParams;
/**
* 构造方法
*
* @param context
*/
public KqwToast(Context context, int bottomHeight) {
mContext = context;
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
mParams = new WindowManager.LayoutParams();
// 设置显示位置
mParams.width = LayoutParams.MATCH_PARENT;
mParams.height = LayoutParams.WRAP_CONTENT;
mParams.y = 0 == bottomHeight ? 120 : bottomHeight;
mParams.gravity = Gravity.BOTTOM;
mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mParams.type = WindowManager.LayoutParams.TYPE_TOAST;
}
/**
* 显示交易信息
*/
public void showKqwToast() {
mKqwToast = View.inflate(mContext, R.layout.kqw_toast, null);
mWindowManager.addView(mKqwToast, mParams);
}
@Override
public void onClick(View v) {
}
/**
* 关闭提示信息
*/
public void closeKqwToast() {
try {
if (null != mWindowManager && mKqwToast != null) {
mWindowManager.removeView(mKqwToast);
// mWindowManager = null;
// mKqwToast = null;
}
} catch (Exception e) {
}
}
}
说明
这里只是显示了一个最基础的自定义Toast,具体Toast显示什么内容,什么动画,自己去实现就可以了,隐藏可以使用CountDownTimer倒计时一段时间关闭,根据自己的需求自己定吧。
讲解
主要的思路很简单,最关键的步骤就两部:
- 拿到WindowManager,窗口的管理者
- 通过WindowManager对象调用addView方法,显示。
API:
addView(mKqwToast, mParams);
- 第一个参数是我们的自定义Toast的布局
- 第二个参数是我们设置Toast的参数
mKqwToast = View.inflate(mContext, R.layout.kqw_toast, null);
- 加载布局,布局文件自己想怎么写就怎么写,代码就不贴了。
mParams.width = LayoutParams.MATCH_PARENT;
mParams.height = LayoutParams.WRAP_CONTENT;
- 设置布局的宽和高,这里宽是充满父窗体,高是包裹子布局。可以设置具体的置。
mParams.y
- 距离Y轴的距离,还有一个mParams.x是距离X轴的距离。
mParams.gravity = Gravity.BOTTOM;
- 让Toast居于手机屏幕底部
- 设置成Gravity.BOTTOM后,前面设置的mParams.y就是基于底部的距离,同理,如果设置成Gravity.TOP,就是基于顶部的距离,其它的就不一一举例了。
mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
- 设置不可获取焦点
- 如果Toast是可以获得焦点的,当Toast显示以后,Toast就会抢夺焦点,这时候点击Toast意外的任何地方,事件都不会传递下去(没有反映),这个根据自己的需求来看把,还有一些其他属性,如屏幕常亮,是否可以点击等等,自己点出来看吧,不举例了。
mParams.type = WindowManager.LayoutParams.TYPE_TOAST;
- 设置我们自定义的Toast也是一个Toast类型,我看还有还有其它好多类型,具体都是什么效果我也没试过,感兴趣可以自己试试。
mWindowManager.removeView(mKqwToast);
- 隐藏(移除)Toast
附加
CountDownTimer的初始化:
CountDownTimer countDownTimer = new CountDownTimer(3000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
}
};
CountDownTimer的使用:
countDownTimer.start();
说明:
上面倒计时效果为3秒,每一秒执行回调一次onTick方法,3秒倒计时结束回调onFinish方法