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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM