Android提醒微技巧了解Dialog、Toast和Snackbar

Dialog和Toast所有人肯定都不會陌生的,這個我們平時用的實在是太多了。而Snackbar是Design Support庫中提供的新控件,有些朋友可能已經(jīng)用過了,有些朋友可能還沒去了解。但是你真的知道什么時候應(yīng)該使用Dialog,什么時候應(yīng)該使用Toast,什么時候應(yīng)該使用Snackbar嗎?本篇文章中我們就來學(xué)習(xí)一下這三者使用的時機,另外還會介紹一些額外的技巧。

1. Dialog

首先來介紹一下Dialog的用法吧,其實很簡單,相信大多數(shù)人都是經(jīng)常使用的:


這段代碼就可以彈出一個非常精美的Dialog了,如下圖所示:

現(xiàn)在這個Dialog是Material Design風(fēng)格的,因為我是在6.0系統(tǒng)上運行的,因此會自動賦予這樣的風(fēng)格。但是如果在老版本系統(tǒng)上運行,比如說2.3系統(tǒng),會是什么樣的效果呢?運行一下就知道了,如下圖所示:

額。。這個效果就比較丑了,不過沒辦法,這就是2.3系統(tǒng)當時的風(fēng)格呀。

人的審美總是在進步的,我們有沒有什么辦法在老版本的系統(tǒng)中也使用Material Design風(fēng)格的Dialog呢?當然有,Google已經(jīng)充分考慮到了這一點,在appcompat-v7庫中也提供了一個AlertDialog類,完整路徑是:


我們使用這個包中的AlertDialog,就能讓對話框在所有的系統(tǒng)版本中都保持一致的風(fēng)格了?,F(xiàn)在在2.3系統(tǒng)中重新運行一下,效果如下所示:

可以看到,現(xiàn)在的效果就比較不錯了,這也算是一個小技巧吧。

Dialog的作用是給用戶一個提示信息,并讓用戶根據(jù)提示做出判斷。而Dialog的特征就是,它會阻止你原本正在進行的操作,必須停止下來對Dialog進行處理。但是,大多數(shù)的人可能并不喜歡這樣被打斷,也許用戶正在處理一項重要的操作,突然彈出一個Dialog遮擋住了他原本的操作,這個時候用戶會變得很惱火。

因此,使用Dialog的時候還是謹慎一點比較好,盡量不要給用戶帶來糟糕的體驗感。

2. Toast

說到不會阻擋用戶原本正在進行的操作,這就延伸到我們今天的第二個主題,Toast。Toast只會彈出一段信息,告訴用戶某某事情已經(jīng)發(fā)生了,過一段時間后就會自動消失。它完全不會阻擋用戶的任何操作,甚至用戶也可以完全不用理會Toast。

那么我們還是先來看一下Toast的基本用法吧,如下所示:


最后一個參數(shù)用于指定Toast顯示的時長,Toast.LENGTH_SHORT表示顯示時間較短,Toast.LENGTH_LONG表示顯示時間較長。

不過也不是說Toast的用法就一點深度都沒有了,比如說上述的寫法就會存在如下圖所示的問題:

可以看到,這里我快速連續(xù)點擊了五次按鈕,Toast就觸發(fā)了五次。這樣的體驗其實是不好的,因為也許用戶是手抖了一下多點了幾次,導(dǎo)致Toast就長時間關(guān)閉不掉了。又或者我們其實已在進行其他操作了,應(yīng)該彈出新的Toast提示,而上一個Toast卻還沒顯示結(jié)束。

因此,最佳的做法是將Toast的調(diào)用封裝成一個接口,寫在一個公共的類當中,如下所示:


可以看到,這里和我們平時使用Toast的方式并不一樣,這里會先判斷Toast對象是否為空,如果是空的情況下才會調(diào)用makeText()方法來去生成一個Toast對象,否則就直接調(diào)用setText()方法來設(shè)置顯示的內(nèi)容,最后再調(diào)用show()方法將Toast顯示出來。由于不會每次調(diào)用的時候都生成新的Toast對象,因此剛才我們遇到的問題在這里就不會出現(xiàn)了。

調(diào)用的時候也很簡單,只需要把Context對象和Toast要顯示的內(nèi)容傳進來就可以了:


現(xiàn)在我們再重新運行一遍程序,效果如下圖所示:

可以看到,現(xiàn)在不管我們觸發(fā)多少次Toast調(diào)用,都只會持續(xù)一次Toast顯示的時長,這也算是一個小技巧吧。

Toast的作用是告訴用戶現(xiàn)在發(fā)生了什么事情,不會阻擋用戶的操作,但同時用戶只能被動接收這個事情,因為沒有什么辦法來讓用戶是選擇同意還是拒絕。

雖說Toast在用戶體驗方面要比Dialog好一些,但是也要慎用,尤其是涉及到一些敏感操作的時候。比如說刪除數(shù)據(jù),只給用戶一個提示:“你的數(shù)據(jù)已被刪除”,而不給用戶選擇是否要刪除的機會,這個時候用戶可能就要暴走了。

3. Snackbar

如果說Dialog和Toast是兩個極端的話,那么Snackbar就是處于中間的位置了。Snackbar和Toast比較相似,但是用途更加廣泛,并且它是可以和用戶進行交互的。Snackbar使用一個動畫效果從屏幕的底部彈出來,過一段時間后也會自動消失。

在使用Snackbar之前,首先需要在app/build.gradle中添加相應(yīng)的依賴:


然后就可以使用Snackbar了,它的用法和Toast是比較相似的:


這里調(diào)用Snackbar的make()方法來創(chuàng)建一個Snackbar對象,make()方法的第一個參數(shù)需要傳入一個view,只要是當前界面布局的任意一個view都可以,Snackbar會使用這個view來自動查找最外層的布局,用于展示Snackbar。第二個參數(shù)就是Snackbar中顯示的內(nèi)容,第三個參數(shù)是Snackbar顯示的時長。這些和Toast都是類似的。

接著這里又調(diào)用了一個setAction()方法來設(shè)置一個動作,從而讓Snackbar不僅僅是一個提示,而是可以和用戶進行交互的。最后調(diào)用show()方法讓Snackbar顯示出來。

現(xiàn)在重新運行一下程序,效果如下圖所示:

可以看到,Snackbar的效果有點類似于Toast,不過它是從屏幕底部彈出來的。另外Snackbar上面可以加入和用戶交互的按鈕,比如刪除數(shù)據(jù)的時候給用戶一個Undo的選項,從這些小的細節(jié)方面都可以提升很多的用戶體驗。

4. 總結(jié)

現(xiàn)在你有三種方式可以給用戶提示信息,Dialog、Toast和Snackbar,下面我們對這三種方式的使用時機做個總結(jié)吧。

Dialog:當提示信息是至關(guān)重要的,并且必須要由用戶做出決定才能繼續(xù)的時候,使用Dialog。

Toast:當提示信息只是告知用戶某個事情發(fā)生了,用戶不需要對這個事情做出響應(yīng)的時候,使用Toast。

Snackbar:以上兩者之外的任何其他場景,Snackbar可能會是你最好的選擇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原創(chuàng)微信公眾號郭霖 WeChat ID: guolin_blog Dialog和Toast所有人肯定都不會陌生的,...
    木木00閱讀 997評論 3 13
  • 本文轉(zhuǎn)載于郭霖大神的博客,點擊進入原文。另文章末尾加上了一點自己的見解。 1. Dialog 首先來介紹一下Dia...
    2ivy閱讀 557評論 0 3
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,204評論 25 708
  • 1感恩父母,因為父母不僅僅對我有養(yǎng)育之恩,還 在創(chuàng)業(yè)的路上鼓勵我支持我!謝謝你們!我愛你們! 2、感恩老公,因為老...
    海清_3a07閱讀 216評論 0 4
  • 不是社會強奸了你。而是你被社會強奸了 區(qū)別在于。 一個是被動。 一個是活該。
    lan_8716閱讀 180評論 0 0

友情鏈接更多精彩內(nèi)容