ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
一个简单的Toast封装类。
效果图
| API = 6.0 | API = 4.4.2 |
![]() |
|
代码分析
- 实现了不管我们触发多少次Toast调用,都只会持续一次Toast显示的时长;
- 使用了系统上下文,防止当前Activity未加载完成就退出时,程序崩溃的情况;
- 缺陷:只是调用系统的Toast显示,未自定义Toast的显示风格(机型不同,显示的样式也就不同)。
使用步骤
一、项目组织结构图

注意事项:
1、复制ToastUtil类文件后需要重新import MyApplication路径
二、导入步骤
创建一个包含以下代码的MyApplication.java(自定义的Application子类)
/**
* Used 自定义Application【系统上下文】
*/
public class MyApplication extends Application{ /**系统上下文*/
private static Context mAppContext; @Override
public void onCreate() {
super.onCreate();
mAppContext = getApplicationContext(); } /**获取系统上下文:用于ToastUtil类*/
public static Context getAppContext()
{
return mAppContext;
}
}
在AndroidManifest.xml中声明这个MyApplication
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.why.project.toastutildemo"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".MyApplication">
<activity android:name=".activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application> </manifest>
在{package}.util(比如,com.why.project.toastutildemo.util)包下新建一个ToastUtil.java
package com.why.project.toastutildemo.util; import android.content.Context;
import android.view.Gravity;
import android.widget.Toast; import com.why.project.toastutildemo.MyApplication; /**
* Create By HaiyuKing
* Used 简单的Toast封装类
*/
public class ToastUtil { private static Toast toast;//实现不管我们触发多少次Toast调用,都只会持续一次Toast显示的时长 /**
* 短时间显示Toast【居下】
* @param msg 显示的内容-字符串*/
public static void showShortToast(String msg) {
if(MyApplication.getAppContext() != null){
if (toast == null) {
toast = Toast.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
//1、setGravity方法必须放到这里,否则会出现toast始终按照第一次显示的位置进行显示(比如第一次是在底部显示,那么即使设置setGravity在中间,也不管用)
//2、虽然默认是在底部显示,但是,因为这个工具类实现了中间显示,所以需要还原,还原方式如下:
toast.setGravity(Gravity.BOTTOM, 0, dip2px(MyApplication.getAppContext(),64));
toast.show();
}
}
/**
* 短时间显示Toast【居中】
* @param msg 显示的内容-字符串*/
public static void showShortToastCenter(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = Toast.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
} /**
* 短时间显示Toast【居上】
* @param msg 显示的内容-字符串*/
public static void showShortToastTop(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = Toast.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.TOP, 0, 0);
toast.show();
}
} /**
* 长时间显示Toast【居下】
* @param msg 显示的内容-字符串*/
public static void showLongToast(String msg) {
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = Toast.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_LONG);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.BOTTOM, 0, dip2px(MyApplication.getAppContext(),64));
toast.show();
}
}
/**
* 长时间显示Toast【居中】
* @param msg 显示的内容-字符串*/
public static void showLongToastCenter(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = Toast.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_LONG);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
/**
* 长时间显示Toast【居上】
* @param msg 显示的内容-字符串*/
public static void showLongToastTop(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = Toast.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_LONG);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.TOP, 0, 0);
toast.show();
}
} /*=================================常用公共方法============================*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}
三、使用方法
ToastUtil.showShortToast("ToastUtilDemo");//如果显示字符串,直接写即可
ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.app_name));//如果想要显示Strings.xml文件中的字符串,建议使用MyApplication.getAppContext()
如果是在Fragment、DialogFragment中调用ToastUtil类,则建议使用下面的方式
if(isAdded()) {//如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回false。
ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.app_name));
}
混淆配置
无
参考资料
暂时空缺
项目demo下载地址
https://github.com/haiyuKing/ToastUtilDemo
ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】的更多相关文章
- ToastCustomUtil【简单的Toast封装类】【自定义Toast的显示风格】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 ToastUtil + ToastCustom结合.主要解决低版本机型上系统toast显示不好看的问题. 效果图 代码分析 在Toa ...
- 自定义Toast和RatingBar的简单用例
Toast是一个包含用户点击消息.Toast类会帮助你创建和显示这些.Android中的Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动 向右划动五角星增加 单击按钮显示自 ...
- 简单好用的Toast封装类——EasyToast
我们用toast时不能设置显示的时间,而且不支持在线程中展示toast,下面我对原始的toast进行了封装,这样我们可以很方便的进行toast的使用了. package com.kale.lib.ut ...
- Android带图片的Toast(自定义Toast)
使用Android默认的Toast Toast简介: Toast是一个简单的消息显示框,能够短暂的出现在屏幕的某个位置,显示提示消息. 默认的位置是屏幕的下方正中,一般Toast的使用如下: Toas ...
- Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明
http://blog.csdn.net/wangfayinn/article/details/8065763 Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失. ...
- 自定义Toast解决快速点击时重复弹出,排队无止尽
解决办法:自定义MyToast类: public class MyToast { /** 之前显示的内容 */ private static String oldMsg ; /** Toast对象 * ...
- Android开发必知--自定义Toast提示
开发过Android的童鞋都会遇到一个问题,就是在打印Toast提示时,如果短时间内触发多个提示,就会造成Toast不停的重复出现,直到被触发的Toast全部显示完为止.这虽然不是什么大毛病,但在用户 ...
- android 自定义Toast显示风格
1.创建一个自己想要显示Toast风格的XML如下代码(toast_xml.xml): <?xml version="1.0" encoding="utf-8&qu ...
- 自定义Toast样式-两行文本居中显示
toast可以设置自定义的view和显示位置.下面是一个简单的例子,复杂些的就是改变其布局文件就可以了. /** * @author BMR * @ClassName: ToastWithTwoTex ...
随机推荐
- Spring Cloud 多版本管理那些事。
好久没有研究 Spring Cloud 了,也没有关注它的更新及新特性,上官网看了下,又增加了几个版本,有正式版有预览版,多达 6 个版本,实在让人蒙逼. 而我们的项目版本还仪停留在 Dalston ...
- compact_op.go
package clientv3 import ( pb "github.com/coreos/etcd/etcdserver/etcdserverpb" ) // Com ...
- 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
- MYSQL——数据库存储引擎!
本人安装mysql版本为:mysql Ver 14.14 Distrib 5.7.18, for Win64 (x86_64),查看mysql的版本号方式:cmd-->mysql --vers ...
- 关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在j ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...
- 『这是一篇干货blog』
更新记录一些很好的干货博客以及工具网站. 各文章,工具网站版权归原作者所有,侵删. Articles 浅谈C++ IO优化--读优输优方法集锦 浅谈斜率优化 思维导图好助手--开心食用Xmind Ty ...
- HTTP2和HTTPS来不来了解一下?
一.前言 只有光头才能变强 HTTP博文回顾: PC端:HTTP就是这么简单 PC端:HTTP面试题都在这里 微信公众号端:HTTP就是这么简单 微信公众号端:HTTP面试题都在这里 本文力求简单讲清 ...
- 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】
[缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...
- 查看多核CPU各核的状态
1 top 命令,然后按数字“1” 2 命令:mpstat -P ALL 3 命令:sar -P ALL 输出较多,可grep或者重定向至文件查看 个人推荐使用第二种方式,操作方便且输出较少,看 ...
