1. 程式人生 > >Android自定義Toast 解決關閉通知 Toast無法彈出

Android自定義Toast 解決關閉通知 Toast無法彈出

package common;

import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;
import java.util.Stack;
import java.util.Vector;

import video.bwgc.com.bwgclibrary.R;

/**
 * <b>類   名:</b>${TYPE_NAME} <br/>
 * <b>類描述:</b> <br/>
 * <b>建立人:</b>zhangqi<br/>
 * <b>建立時間:</b>2017/6/6<br/>
 * <b>修改人:</b>zhangqi<br/>
 * <b>修改時間:</b>2017/6/6<br/>
 * <b>修改備註:</b><br/>
 *
 * @version 1.0.0<br/>
 */
public class ToastUtil {
    public static final int LENGTH_SHORT = 0x00;
    public static final int LENGTH_LONG = 0x01;

    private final int ANIMATION_DURATION = 600;

    public Context mContext;
    public String msg;
    private int HIDE_DELAY = 2000;

    public static boolean isRunning=false;

    private Handler mHandler = new Handler();

    public static Stack<ToastUtil> stack = new Stack();
    // 表示吐司裡顯示的文字
    public static ToastUtil makeText(Context context, String message,
                                      int HIDE_DELAY) {
        ToastUtil utils=new ToastUtil();
        utils.mContext=context;
        utils.msg=message;

        if (HIDE_DELAY == LENGTH_LONG) {
            utils.HIDE_DELAY= 2500;
        } else {
            utils.HIDE_DELAY= 1500;
        }

        return utils;
    }

    public static void wakeUp(){
        isRunning=true;
        if (!stack.empty()) {
            ToastUtil util=stack.pop();
            util.doshow();

        }else{
            isRunning=false;
        }


    }

    public void doshow(){
        final ViewGroup container = (ViewGroup) ((Activity) mContext)
                .findViewById(android.R.id.content);
        final View mView = ((Activity) mContext).getLayoutInflater().inflate(
                R.layout.toast_layout, null);
        container.addView(mView);

        final LinearLayout mContainer = (LinearLayout) mView.findViewById(R.id.mbContainer);
        mContainer.setVisibility(View.GONE);
        TextView mTextView = (TextView) mView.findViewById(R.id.mbMessage);
        mTextView.setText(msg);

        // 顯示動畫
        AlphaAnimation mFadeInAnimation = new AlphaAnimation(0.0f, 1.0f);
        // 消失動畫
        final AlphaAnimation mFadeOutAnimation = new AlphaAnimation(1.0f, 0.0f);
        mFadeOutAnimation.setDuration(ANIMATION_DURATION);
        mFadeOutAnimation
                .setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                        // 消失動畫後更改狀態為 未顯示

                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        // 隱藏佈局,不使用remove方法為防止多次建立多個佈局
                        mContainer.setVisibility(View.GONE);
                        container.removeView(mView);
                        wakeUp();
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {

                    }
                });
        mContainer.setVisibility(View.VISIBLE);

        mFadeInAnimation.setDuration(ANIMATION_DURATION);

        mContainer.startAnimation(mFadeInAnimation);
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mContainer.startAnimation(mFadeOutAnimation);
            }
        }, HIDE_DELAY);
    }

    public void show() {
        stack.push(this);
        if(!isRunning){
            wakeUp();

        }
    }

}

toast_layout.xml檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mbContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="60dp"
    android:gravity="bottom|center"
    android:orientation="vertical"
    android:paddingLeft="50dp"
    android:paddingRight="50dp">

    <LinearLayout android:id="@+id/toast_linear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginBottom="50dp"
        android:padding="8dp">

        <TextView android:id="@+id/mbMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_margin="5dp"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:layout_weight="1"
            android:gravity="center"
            android:background="@drawable/shape_toastutils_bg"
            android:shadowColor="#BB000000"
            android:shadowRadius="2.75"
            android:textSize="12sp"
            android:textColor="#ffffff" />
    </LinearLayout>
</LinearLayout>


shape_toastutils_bg.xml檔案

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#70000000" />
    <corners android:radius="12dp" />
</shape>

使用方法:
ToastUtil.makeText(context,msg,ToastUtil.LENGTH_SHORT).show();


相關推薦

Android定義Toast 解決關閉通知 Toast無法

package common; import android.app.Activity; import android.content.Context; import android.os.Handler; import android.util.Log; import

android定義的dialog中的EditText無法輸入法解決方案

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);//彈出輸入法,並且寫在show()方法之後。 解決Dialog 消失,輸入法不消失的問題: 參考:https://blog.csd

Android定義PopWindow(QQ、微信選單)

前段時間在個人開發的專案中需要用到彈出選單,類似QQ右上角的彈出選單,自己使用popwin的次數也不是很多,其中也遇到過一點問題,今天正好有時間就把一些經驗分享給大家。 先來看看最終實現過後的效果怎麼樣,下面放上圖 自定義的彈出選單是繼承的p

Android 定義View 解決 TextView 自動換行排版不整齊

第一次寫東西,內心小緊張,又不知道怎麼寫,儘量把遇到的問題和解決思路說清楚,寫的不好請見諒。 需求 專案有一個需求,很簡單,就是一個recyclerview,item裡面是兩個textview。一個TextView顯示的字串包含圓角、半形和中、英文以及數字。 想起來

android-定義View解決wrap_content無效的問題

###問題提出 在我們自定義view時,如何需要是當前的view內容自適應,這種平常的使用中,只需要在xml檔案中制定寬高或者長高為wrap_content即可,但是如果該view是我們自定義的,那麼此時再在xml檔案中指定寬高為wrap_content則不能起到內容自適

Android定位&地圖&導航——基於百度地圖,實現定義圖示繪製並點選時泡泡

public class MainActivity extends Activity { private EditText txtAddr; // 定位相關 LocationClient mLocClient; LocationData locData = nul

android 定義鍵盤 游標只在前面無法變動

今天做了一個自定義鍵盤,發現手指無法移動游標。 下面是解決方案: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); try {

Android定義View實戰-100行帶你寫SwitchButton

1 序言 網上很多自定義View的例子都非常詳細講解了如何寫出一個高效實用的自定義View,但是這些由於過於詳細,給予一些新手的學習造成了一定的困難,比如說,當初我要學習如何自定義下拉重新整理控制元件,結果,很多大神順便把一些在我看來 學習自定義View非必要的技術帶了進來

Android-定義Toast、LayoutInflater使用其他佈局

內容: 1.自定義樣式toast 2.再活動中新增其他佈局 實現效果: 步驟: 一、自定義View 引用zidingyixml檔案 生成一個佈局物件 二、採用Toast 的addView() 方法將該物件新增到Toast物件中 三、顯示:Toast.show()

android 定義toast停留時間

Toast類 //首先定義全域性變數mToast已經顯示和隱藏函式 private Toast mToast; // 隱藏toast資訊框常量 public static final int AIRPLAY_MESSAGE_HIDE_TOAST

Android-定義圓角Toast提示框

有時候我們根據需求需要自己指定toast的樣式,例如在介面中間顯示、圓角、帶圖片什麼的。 今天我給大家帶來的就是自定義圓角帶圖片顯示的toast提示框,先來看看最終效果圖:圖一為圓角帶圖片顯示的,圖二為圓角普通顯示。均為居中顯示 圖1:          圖2: 先來看看

Android 定義Toast顯示多種方式

Toast toast = Toast.makeText(this.getApplicationContext,"This is a Toast including Image!", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); Lin

Android 定義Toast,修改Toast樣式和顯示時長

Android 中有一個 Toast 控制元件,可以用來顯示提示資訊,還是非常好用的,但是樣式和顯示時長比較侷限。所以我們來自定義一個  Toast ,讓它可以顯示我們想要的效果,並能設定顯示時長。 首先,在 res\layout 資料夾下建立自定義 Toast 的佈

android 定義Toast顯示風格

1.建立一個自己想要顯示Toast風格的XML如下程式碼(toast_xml.xml): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.

android定義Toast——讓你應用別具一格

實際上,在github上層看到這種toast,但我的感覺是:用起來太麻煩了!我需要的要求是越簡單越好! 簡化Toast 原toast形式: Toast.makeText(this,”t”,Toast.LENGTH_LONG).show();或T

Android定義Toast檢視和動畫

在Android Toast基礎與原理中,我們對Toast的原始碼進行了分析。我們也對Toast的實現原理有了一定的瞭解。接下來我們將編寫一個工具類,來完成Toast的自定義檢視和動畫。 一、實現原理分析 通過上篇文章,我們知道Toast是通過內部類TN(一個ITra

android 定義Toast增加點選事件、Toast隱藏動畫、Toast寬度為match_parent

在自定義Toast的時候,可能會用到點選事件,但是android系統本身Toast只是用於提示,並不支援點選事件,即使自定義Toast也不支援點選事件,檢視Toast原始碼可以發現,其內部的TN.class(該為私有類,外部調用不了)裡面的WindowManag

定義View繼承現有的Toast,實現訂單提醒的Toast,從左下角顯示然後退出

自定義View繼承現有的Toast,實現訂單提醒的Toast,從左下角顯示然後退出 /** * Created by on 16-2-4. */ public class NotifyToast extends Toast { private long last

Android 定義Dialog 裡面有EditText控制元件點選關閉輸入法失效的問題

在做一個專案的時候,自定義額了一個Dialog 裡面有取消,儲存按鈕,以及EditText,在輸入法彈出的時候,點選取消按鈕,自定義dialog對話方塊關閉了,但是輸入法始終關閉不了,在網上找了很多方法,都不能很好的解決,輸入法不能關閉的問題。    最好找到的解決辦法是

android定義控制元件View在Activity中使用findByViewId得到結果為null,解決方法。。

androidの自定義控制元件View在Activity中使用findByViewId得到結果為null 1.  大家常常自定義view,,然後在xml 中新增該view 元件。。如果在Activity 中使用findByViewId 方法獲取該view 時候,返回物件總為