1. 程式人生 > >Android中關於Toast的使用體會

Android中關於Toast的使用體會

在安卓開發中,經常使用Toast用作使用者的操作提示,但Toast的顯示時長在原始碼中僅定義了兩個常量,如下:

Toast原始碼分析:

NotificationManagerService.Java這個類中定義了兩個靜態變數,分別對應Toast.LENGTH_LONG(3.5秒)和Toast.LENGTH_SHORT(2秒)的值:

 private static final int LONG_DELAY = 3500; // 3.5 seconds           
 private static final int SHORT_DELAY = 2000; // 2 seconds

呼叫方法如下:
private void scheduleTimeoutLocked(ToastRecord r, boolean immediate){
    Message m =Message.obtain(mHandler, MESSAGE_TIMEOUT, r);
    long delay =immediate ? 0 :(r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY);
    mHandler.removeCallbacksAndMessages(r);
    mHandler.sendMessageDelayed(m, delay);
}

也就是說,正常情況下Toast..makeText(Context context,CharSequence text, int duration).show() 中的duration只能設這兩個值,其他值是沒有用處的。

自定義Toast時長:

但實際專案中即便是Toast.LENGTH_SHORT(2秒)對於使用者來說都顯得很長,這裡我們可以用handler來手動cancel這個toast,同時把它當做一個通用方法來使用。具體方法如下

/**
* 顯示toast,自己定義顯示長短。
* param1:activity  傳入context
* param2:word   我們需要顯示的toast的內容
* param3:time length  long型別,我們傳入的時間長度(如500)
*/
public static void showToast(final Activity activity, final String word, final long time) {
	activity.runOnUiThread(new Runnable() {
		public void run() {
			final Toast toast = Toast.makeText(activity, word, Toast.LENGTH_LONG);
			toast.show();
			Handler handler = new Handler();
			handler.postDelayed(new Runnable() {
				public void run() {
					toast.cancel();
				}
			}, time);
		}
	});
}

學會分享,誨人利己。

相關推薦

AndroidToast顯示時間的自定義

Android中Toast的顯示時間為特定時間且不可更改,但是有時候我們開發設計需要讓Toast顯示更長時間,或者自己完全控制Toast的顯示和關閉。通過檢視Toast類的原始碼,可以看出,這有點難為它了,Toast類本身並沒有提供相應方法。 但是通過原始碼的檢視,還是可以看出點眉頭。原始碼分析思路

AndroidToast使用總結,原始碼剖析

最近看到折800重新整理成功彈出的效果挺好看的,就想著自己也實現一下,下面是折800的重新整理效果 感覺這個可以用popupwindow或者toast來實現,就用toast來實現了。佈局比較簡單,不貼圖了,直接貼上程式碼: public void showTo

關於AndroidToast使用小結

Android中的Toast用於向用戶顯示一些幫助/提示。 以下是關於Toast的一些使用的總結,希望對大家的學習和解決問題提供一些幫助: 預設Toast樣式: Toast.makeText(get

AndroidToast顯示時間的自定義控制

@SuppressLint("InflateParams") public static void show(Context context, String text) { View view = LayoutInflater.from(cont

AndroidToast不顯示的解決方案

今天在做測試的時候,Toast怎麼也顯示不出來,我分析了一下幾種可能 1、Context有問題,可能對應的上下文不正確 2、message的值為空 但是我檢查了好幾遍,都沒有問題。。。。在網上查資料,說不能再子執行緒中更新UI,但是我沒有開執行緒啊。。。無語了一晚上之後。我

Android關於Toast的使用體會

在安卓開發中,經常使用Toast用作使用者的操作提示,但Toast的顯示時長在原始碼中僅定義了兩個常量,如下: Toast原始碼分析: NotificationManagerService.Java這

Android通過反射來設置Toast的顯示時間

ring margin ner manage etc short 延遲 lln sse 這個Toast的顯示在Android中的用途還是非常大的,同一時候我們也知道toast顯示的時間是不可控的。我們僅僅能改動他的顯示樣式和顯示的位置,盡管他提供了一個顯示時間的設置方法

Android通過反射來設定Toast的顯示時間

這個Toast的顯示在Android中的用途還是很大的,同時我們也知道toast顯示的時間是不可控的,我們只能修改他的顯示樣式和顯示的位置,雖然他提供了一個顯示時間的設定方法,但是那是沒有效果的(後面會說到),他有兩個靜態的常量Toast.SHORT和Toast.LONG,這

Android關於定製Toast使用總結

前言: 有時我們有這樣一個需求,那就是,有時採用系統自帶的Toast感覺有點挫,所以我們下邊來進行一個定製看一下... 效果圖: 1>設定toast顯示的內容 toast.setView(

Android Studio Toast重複點選不排隊

在使用Toast時,如果直接呼叫makeText函式,每次點選就會建立一個Toast物件,後面的Toast物件會在前面的Toast顯示完以後依次顯示。 所以會導致點選10次一直顯示幾十秒的情況,和我們平常使用的習慣不符。因此封裝一個ToastUtil類實現 每次點選都顯

Android防止Toast一直點選一直彈出

在使用工作中經常使用Toast,如果使用者連續點選很多下按鈕,可能Toast顯示一兩分鐘也不會消失,這就給我們的使用者造成了困擾。以下是解決辦法: private int num = 0;//連續點選的次數 private static Toast toa

AndroidDialog和Toast及其Snackbar的使用和區別

一.Snackbar的使用 連線地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0714/3187.html 如果說Dialog和Toast是兩個極端的話,那麼Snackbar就是處

Android 關於吐司Toast帶文字和圖片的封裝。

Android中我們常用的提示功能就是Toast了,最近使用Toast的時候出現了一些不可預料的錯誤,分析才發現是由Toast例項太多引起導致,所以基於系統Toast封裝了帶圖片和文字Toast,並且永遠只有一個Toast例項,大大減少了記憶體開銷。實現思路:1,關於如何實現

使用Toast(android的一種提醒方式) & 建立監聽 --4

Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() {

Android修改toast的顯示位置

在xml中設定onclick屬性值,內部寫入一個String資料,在class檔案中使用此String作為方法名,即可實現其跳轉 public class ToastActivity extends

Android的線程

開發者 又是 ace appcompat 技術 ted unknown 消息通知 設計模型 本文轉自:http://www.jianshu.com/p/d59b3cce2b54 如何理解線程 在操作系統中,線程是操作系統調度的最小單元,同時線程又是一種受限的系統資源,即

AndroidgetDrawable和getColor過時的替代方法

this logs con 知識 log launcher 16px ase spa 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 前言 Android SDK 升級到 23 之後,getDrawable和getColor方法提示過時。 解決方案 getRe

EventBus在Android的簡單使用

pos stop hub create 數據傳遞 bsp 還要 GridView itemclick EventBus是一個方便與Android中各組件通信的開源框架,開源地址;https://github.com/greenrobot/EventBus。Ev

Android的GraphicBuffer同步機制-Fence

mman fill spl 之前 超出 on() passing cli 觸發 Fence是一種同步機制,在Android裏主要用於圖形系統中GraphicBuffer的同步。那它和已有同步機制相比有什麽特點呢?它主要被用來處理跨硬件的情況。尤其是CPU。GPU和HWC

Android處理大圖片時圖片壓縮

oca 內存空間 pan std ret bitmap sans source tar 1、BitmapFactory.Options中的屬性 在進行圖片壓縮時,是通過設置BitmapFactory.Options的一些值來改變圖片的屬性的,以下我們來看看BitmapF