开发者社区> 啊啊啊88jdk> 正文

自定义Toast

简介: 自定义Toast 效果图 类 package kong.qingwei.sharedPreferences; import android.
+关注继续查看

自定义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倒计时一段时间关闭,根据自己的需求自己定吧。

讲解

主要的思路很简单,最关键的步骤就两部:

  1. 拿到WindowManager,窗口的管理者
  2. 通过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方法

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android之Toast通知的几种自定义用法
Toast在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失。 1.默认用法 [html] view plain copy print? Toast.makeText(getApplicationContext(), "默认Toast样式",Toast.
787 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19691 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
13759 0
Android 自定义Toast,并且勘误Android工具类里面的ToastUtils
前言 相信大部分仁兄在使用系统Toast的时候,都感觉不太尽如人意,因为系统Toast显示的位置比较固定,并且字体颜色等会跟随系统版本变化,那么能不能自己写一个呢,答案是当然的。
1030 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
17986 0
支付宝小程序自定义弹窗插件wcPop|模态弹窗model|弱提示Toast
支付宝小程序弹窗插件wcPop|小程序自定义弹窗组件|提示框alert、确认框confirm及prompt、toast提示 请原谅我在这里吐槽下,微信小程序、支付宝小程序官方提供的交互反馈弹窗  如:提示框alert、确认框confirm及prompt、toast弱提示等插件功能比较有限,很多想要的效果都达不到。
6294 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24787 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
17033 0
206
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载