版权声明:本文为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的显示风格】的更多相关文章

  1. ToastCustomUtil【简单的Toast封装类】【自定义Toast的显示风格】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 ToastUtil + ToastCustom结合.主要解决低版本机型上系统toast显示不好看的问题. 效果图 代码分析 在Toa ...

  2. 自定义Toast和RatingBar的简单用例

    Toast是一个包含用户点击消息.Toast类会帮助你创建和显示这些.Android中的Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动 向右划动五角星增加 单击按钮显示自 ...

  3. 简单好用的Toast封装类——EasyToast

    我们用toast时不能设置显示的时间,而且不支持在线程中展示toast,下面我对原始的toast进行了封装,这样我们可以很方便的进行toast的使用了. package com.kale.lib.ut ...

  4. Android带图片的Toast(自定义Toast)

    使用Android默认的Toast Toast简介: Toast是一个简单的消息显示框,能够短暂的出现在屏幕的某个位置,显示提示消息. 默认的位置是屏幕的下方正中,一般Toast的使用如下: Toas ...

  5. Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明

    http://blog.csdn.net/wangfayinn/article/details/8065763 Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失. ...

  6. 自定义Toast解决快速点击时重复弹出,排队无止尽

    解决办法:自定义MyToast类: public class MyToast { /** 之前显示的内容 */ private static String oldMsg ; /** Toast对象 * ...

  7. Android开发必知--自定义Toast提示

    开发过Android的童鞋都会遇到一个问题,就是在打印Toast提示时,如果短时间内触发多个提示,就会造成Toast不停的重复出现,直到被触发的Toast全部显示完为止.这虽然不是什么大毛病,但在用户 ...

  8. android 自定义Toast显示风格

    1.创建一个自己想要显示Toast风格的XML如下代码(toast_xml.xml): <?xml version="1.0" encoding="utf-8&qu ...

  9. 自定义Toast样式-两行文本居中显示

    toast可以设置自定义的view和显示位置.下面是一个简单的例子,复杂些的就是改变其布局文件就可以了. /** * @author BMR * @ClassName: ToastWithTwoTex ...

随机推荐

  1. python使用@property

    在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...

  2. python之分析decode、encode、unicode编码转换

    decode()方法使用注册编码的编解码器的字符串进行解码.它默认为默认的字符串编码.decode函数可以将一个普通字符串转换为unicode对象.decode是将普通字符串按照参数中的编码格式进行解 ...

  3. MyBatis的增删改查。

    数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答. 1.调整后的结构图: 2.连接数据库文件配置分离: 一般的程序都会把连 ...

  4. C#中使用Bogus创建模拟数据

    原文:CREATING SAMPLE DATA FOR C# 作者:Bruno Sonnino 译文:C#中使用Bogus创建模拟数据 译者: Lamond Lu 背景 在我每次写技术类博文的时候,经 ...

  5. 华为云(ECS)-linux服务器中-Ubuntu图形界面安装-解决root登录受限-VNCviwer/Teamviwer远程访问教程

    安装ubuntu-desktop .更新软件库 apt-get update .升级软件 apt-get upgrade .安装桌面 apt-get install ubuntu-desktop 解决 ...

  6. 分析Class类和ClassLoader类下的同名方法getResourceAsStream

    在读取本地资源的时候我们经常需要用到输入流,典型的场景就是使用Druid连接池时读取连接池的配置文件.Java为我们提供了读取资源的方法getResourceAsStream(),该方法有三种: Cl ...

  7. Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!

    python3爬虫遇到了反爬 当你兴冲冲的打开一个网页,发现里面的资源好棒,能批量下载就好了,然后感谢写个爬虫down一下,结果,一顿操作之后,发现网站竟然有反爬措施,尴尬了. 接下来的几篇文章,我们 ...

  8. C# 操作Word页眉页脚——奇偶页/首页不同、不连续设置页码、复制页眉页脚、锁定页眉页脚、删除页眉页脚

    前言 本文是对Word页眉页脚的操作方法的进一步的阐述.在“C# 添加Word页眉页脚.页码”一文中,介绍了添加简单页眉页脚的方法,该文中的方法可满足于大多数的页眉页脚添加要求,但是对于比较复杂一点的 ...

  9. Web前端 css实现元素垂直居中的常用方法

    方法1:table-cell html结构: 1 2 3 <div class="box box1">         <span>垂直居中</spa ...

  10. 通过user.MYD MySQL密码

    具体的获取方法: 1)通过hex 十六进制的工具打开user.MYD文件 这里使用:0XED 2)复制MySQL密码出来,进行分析 *CEAF6E9FA3A448A25AC9D00C8D7078385 ...