1. 程式人生 > >當Toast遇上色彩:Android第三方庫Crouton學習筆記

當Toast遇上色彩:Android第三方庫Crouton學習筆記

Toast大家都不會陌生,就是經常在介面上彈出的帶有提示資訊的半透明文字框,它短暫出現後就會慢慢變淡消失。與Toast具有相同作用的還有Crouton,這是一個外國人寫的第三方庫,跟Toast相同,一個介面一次只能出現一個Crouton。但與Toast淡出淡入的動畫效果不同,
它一般是從佈局的頂部滑入和滑出的,而且與灰不溜秋的Toast相比,它有多種色彩可供選擇。Toast是“吐司”的英文,Crouton則是“油煎麵包塊”的意思,聽名字就知道這兩個是哥們了。

言歸正傳,我們現在就來學習一下Crouton的使用。

1、準備工作

要想使用Crouton,只需在用Android Studio建立好工程之後,開啟build.gradle檔案,新增以下的依賴庫:

    compile('de.keyboardsurfer.android.widget:crouton:[email protected]') {
        // exclusion is not necessary, but generally a good idea.
        exclude group: 'com.google.android', module: 'support-v4'
    }

2、建立Crouton的最簡方法(在根佈局彈出Crouton)

跟它的兄弟一樣,Crouton也需要呼叫makeText方法來輸入內容,然後再呼叫show方法顯示到介面上:

           /**1、根佈局彈出Crouton**/
                Crouton.makeText(this, //上下文
                        "根佈局的Crouton", //Crouton要顯示的文字
                        Style.INFO, //Crouton的樣式
                        R.id.rl_root) //顯示Crouton的佈局ID,不寫時預設為根佈局
                        .show();

上面的每個引數我都寫了註釋了。其中第三個引數使用了Crouton提供的三種樣式中的一種,三種樣式如下圖所示:
三種預設樣式


第四個引數可以不寫,不寫時預設顯示在根佈局。

執行後的效果如下:
根佈局的Crouton

3、在子佈局上彈出Crouton

由2可知,通過充分利用makeText方法中的引數4,我們可以在任意子佈局上顯示Crouton,就像下面這樣(灰色區域為一個RelativeLayout):

        Crouton.makeText(this, "子佈局的Crouton", Style.ALERT, R.id.rl_child).show();

子佈局的Crouton

4、自定義Crouton

上面區區三種樣式怎麼能滿足我們呢?假如我們需要製作一個圖文並茂的Crouton的話,大家首先想到可能是自己寫一個佈局。Crouton確實是支援自定義佈局的,我們可以先寫一個佈局:
custom_crouton.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:gravity="center"
        android:background="@android:color/holo_blue_dark"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="20dp"
            android:src="@mipmap/clock" />

        <TextView
            android:layout_marginLeft="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="快起床寫程式碼了!"
            android:textColor="@android:color/white"
            android:textSize="20sp" />
    </LinearLayout>

</RelativeLayout>

大家也許會覺得最外層的RelativeLayout有點多餘,但是我試過去掉它之後,LinearLayout的高度值就不起作用了,具體原因我也不明白……

接下來就要用到Crouton類中的另一個靜態方法make來構造Crouton,它的用法也很簡單,只要把自定義View的物件傳入即可:

            View view = View.inflate(context, R.layout.custom_crouton, null);
            Crouton.make(this, view, R.id.rl_root).show();

自定義Crouton

5、通過Style.Builder修改背景顏色和字型樣式

也許有時候我們就只是想給Crouton的背景或者字型換個顏色,為了這麼個小需求就寫一個佈局那也忒麻煩了。難道就沒有介面可以直接修改顏色的嗎?

Crouton當然不會這麼傻,它給我們提供了兩個構造器:Style.BuilderConfiguration.Builder。前者用來構造Crouton的外觀,如背景、字型等;後者用來構造Crouton的配置:停留時間和進出動畫。

Style.Builder提供了很多方法,這裡我不可能一個個地示範了,只是寫了一個小例子,比如我們要實現一個黑底金字帶有陰影的的Crouton(我承認是有點土)時就可以這樣寫:

                //建立Style構造器物件
                Style.Builder sb = new Style.Builder();
                sb.setBackgroundColor(android.R.color.black) //背景顏色
                        .setTextColor(android.R.color.holo_orange_light)//字型顏色
                        .setTextSize(18) //字型大小
                        .setTextShadowColor(android.R.color.white) //字型陰影顏色
                        .setTextShadowRadius(12) //字型陰影半徑
                        .setHeight(120) //Crouton高度
                        .setGravity(Gravity.CENTER) //設定文字居中
                        .setFontName("Ponsi-Regular.otf")//設定字型,直接輸入字型名稱的字串
                ;
                Crouton.showText(this, "This is a Crouton", sb.build());

這裡需要用到showText方法,它的第三個引數就是Style物件。字型檔案要提前放在assets資料夾下,然後直接在setFontName方法中直接輸入字型名稱字串就可以了。但要注意的是setGravity方法只能設定文字內容的位置,對圖片是不起作用的。

自定義背景顏色和字型樣式

6、自定義背景圖片

如果UI給你設計好了Crouton的背景圖片或者整個Crouton就是一張圖片的話,那麼你也可以給Crouton設定圖片:

                sb.setBackgroundDrawable(R.drawable.crouton_pic)
                  .setImageScaleType(ImageView.ScaleType.CENTER_CROP);
                Crouton.showText(this,"",sb.build()); //展示圖片,文字內容為空字串即可

自定義背景圖片

7、通過修改Configuration.Builder修改Crouton配置

前面我們已經成功修改了Crouton的樣式,現在就來修改一下它的配置吧。它配置包含兩個方面:
- 動畫效果,包含進入的動畫和消失的動畫;
- 持續時間,即進入動畫執行完畢後Crouton停留在介面直至消失動畫開始執行的時間。

首先建立兩個動畫檔案:
crouton_in.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:fromXDelta="-100%p"
    android:toXDelta="0">
</translate>

crouton_out.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:fromXDelta="0"
    android:toXDelta="100%p">
</translate>

程式碼的寫法跟Style.Builder的類似:

        //建立Configuration構造器物件
        Configuration.Builder cfg = new Configuration.Builder();
        cfg.setInAnimation(R.anim.crouton_in)
                .setOutAnimation(R.anim.crouton_out)
                .setDuration(1500);
        Crouton.showText(this, "修改配置後的Crouton", Style.CONFIRM, R.id.rl_root, cfg.build());

修改配置

8、同時修改外觀和配置

如果我們需要同時改動外觀和配置怎麼弄呢?這個也很簡單,在完成了外觀和配置的設定之後,呼叫Style構造器中的setConfiguration方法傳入一個Configuration例項即可:

sb.setConfiguration(cfg.build());

大體效果如下:
同時修改外觀和配置

9、Crouton的銷燬

Crouton的銷燬可以呼叫兩個方法(下面是我的理解):
- cancelAllCroutons:銷燬佇列中的Crouton,如果當前有Crouton在展示,那麼它會立即消失,後面的Crouton也不會再顯示;
- clearCroutonsForActivity:銷燬某個Activity中所有的Crouton。

官方的建議是在Activity銷燬,也就是onDestroy方法執行時呼叫cancelAllCroutons方法,確保Crouton不再佔用系統資源。

10、總結

大家應該都知道Crouton的用法了。我們學習瞭如何讓Crouton在根佈局和子佈局上顯示,也學習瞭如何修改它的外觀和配置,相信這些可以滿足我們大部分需求了。如果你有更好玩的用法,歡迎給我留言。
原始碼的GitHub地址:
SlidingToast

參考文章

相關推薦

Toast色彩Android第三方Crouton學習筆記

Toast大家都不會陌生,就是經常在介面上彈出的帶有提示資訊的半透明文字框,它短暫出現後就會慢慢變淡消失。與Toast具有相同作用的還有Crouton,這是一個外國人寫的第三方庫,跟Toast相同,一個介面一次只能出現一個Crouton。但與Toast淡出淡入的

AIK8S使用Rancher安裝機器學習必備工具JupyterHub

Jupyter Notebook是用於科學資料分析的利器,JupyterHub可以在伺服器環境下為多個使用者託管Jupyter執行環境。本文將詳細介紹如何使用Rancher安裝JupyterHub來為資料科學和機器學習開發建立可擴充套件的工作區。 ![](https://oscimg.oschina.net

外包半路出家我是非科班程式設計師

當外包遇上半路出家,我們身邊更多的可能是一些看上去並不那麼極客的程式設計師。和以往的採訪風格不同,今天小編帶來的是一位非科班程式設計師的故事。 人物介紹: 工作5 年,其中做軟體開發不到3年,崗位是java程式設計師,可是現在每天寫的最多的是js 1.你的學習之路以及你是如何走向外包的? 剛畢業接觸的是

5G無人機已在多場景展露頭角

原因 移動 聯通 一個 視角 變化 分享 fff 高速 在人工智能、物聯網、大數據不斷發展的當下,無人機的身影越來越多的出現在了人們視野中,給人們的生活帶來了很多新的變化。經過了半個多世紀的發展,無人機也從最開始的軍事方面的應用,逐漸向民用領域拓展,成為諸多應用領域不可多得

AI量子計算神經網路量子糾錯系統或超越傳統糾錯策略

量子計算機可以解決傳統計算機無法完成的複雜任務。然而,量子態(quantum states)對來自外界的持續干擾極其敏感。研究人員希望使用基於量子糾錯(quantum error correction)的主動保護來解決這個問題。 近日,德國馬克斯·普朗克光學研究所所長Florian Marquardt及其團

光明日報教育區塊鏈,會擦出什麼火花

說起現在最火的新興技術,區塊鏈必是處在風口上的答案之一。日前,京津冀大資料教育區塊鏈試驗區成立,為“區塊鏈+教育”的融合發展之路,提供了一個新的視窗。   當傳統的教育行業與區塊鏈相遇,究竟能為我們帶來什麼?又會擦出怎樣的火花?   推動科研共享和教育可持續發展

S8邊緣計算談阿里雲ENS對直播業務場景的支撐

近日,英雄聯盟S8全球總決賽落下帷幕,中國戰隊IG零封FNC奪得冠軍。這場比賽引起了國內網友的超高關注度,也給直播平臺帶來了不小的技術挑戰。虎牙直播平臺結合阿里雲邊緣節點技術方案,保障了總決賽當日7000萬線上使用者的低延時、穩定流暢以及實時互動,為觀眾提供了流暢的體驗。 那麼類似S8賽

微信小程式TensorFlowServer端實現

又是一年一度的十一黃金旅遊周,你是在景區看人從眾叕,還是在高速公路上觀看大媽打太極呢?旅遊黃金週我一般是儘量不出門,這個十一也不例外。十月一日跑了一個半馬迎接國慶,十月二號選擇去了一個偏門的景點:張之洞與武漢博物館。今天則宅在家,吃吃喝喝之餘,琢磨起識別狗狗的

微信小程式TensorFlow接收base64編碼影象資料

這是當微信小程式遇上TensorFlow系列文章的第四篇文章,閱讀本文,你將瞭解到: 如何檢視tensorflow SavedModel的簽名 如何載入tensorflow SavedModel 如何修改現有的TensorFlow模型,增加輸入層 如果你想要

Swoole ThinkPHP5 世界你好

拓展 mode -s extends 修改 國內鏡像 目錄 rep rec 本文假設你已經有了 Linux 操作系統的 PHP 環境,強烈推薦使用 Vagrant 來搭建開發環境 安裝 Swoole PECL 拓展 可以通過 pecl 命令或者通過源碼包編譯安裝,

video微信瀏覽器

體會 log load 黑邊 當前時間 安卓 -c int shu video在微信瀏覽器中的一些問題及解決方案 最近在做微信瀏覽器中的頁面,由於客戶需要常常需要內嵌或全屏播放視頻。但是在實現過程中問題卻是常有常新的。 1.html書寫 這是最近做的一個全屏播放的案例(視頻

Spring @PathVariable 【. # /】等特殊字符

圖片 代碼 cap uri 簡單 microsoft 傳值 自動 esp @PathVariable註解應該不是新鮮東西了Spring3.0就開始有了 URL中通過加占位符把參數傳向後臺 舉個栗子,如下比較要說的內容比較簡單就大概齊的寫一下 畫面側 $.ajax

“資訊機器人”“商業智能”,“AI”“BI”會有怎樣的火花?

人工智能寫作 人工智能編輯 人工智能采集 新技術的誕生,往往是為了更好的服務人類,而這一過程,則離不開商業。何為商業智能?把企業中現有數據轉化為知識,幫助企業做出明智的業務經營決策的工具。 人工智能誕生後,在1958年,商業智能馬上進入人們的視野。但在過去,商業智能不能給出決策方案,也不能自動處理

Android插件化的兼容性(Android O的適配

cto load 註意 android系統 自己 攔截 str oca 接口 首先聲明,《Android插件化開發指南》這本書所介紹的Android底層是基於Android6.0(API level 23)的,而本書介紹的各種插件化解決方案,以及配套的70多個例

Shell了NodeJS

天才 影響 國內 console 命令 RoCE linu 通知 序言 此文已由作者堯飄海授權網易雲社區發布。歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。摘要在企業級系統維護和互聯網運維中,Shell腳本的編寫與維護常必不可少, 但是Shell腳本的編寫與調試常占用了

管理AI,會發生什麼

當管理遇上AI,會發生什麼? 人工智慧將會將管理(management)從一門藝術轉變成藝術與科學的複合體。 這麼說並不是因為我們未來會從科幻小說所描繪的機器人統治者那裡接受命令,而是因為專業型人工智慧將能讓我們以一種 Peter Drucker(著作等身的管理思想大師

【車友投稿】改裝雙子座

阿里巴巴官方釋出微博稱,連續幾日,一篇名為《阿里員工透露:馬總早移走 1200 億人民幣!網友:不愧是老師》的文章被有組織的進行惡意傳播。阿里巴巴官方釋出微博稱,連續幾日,一篇名為《阿里員工透露:馬總早移走 1200 億人民幣!網友:不愧是老師》的文章被有組織的進行惡意傳播。 對此,阿里表示,該文完全捏造事

innerHTMLdocument getElementById

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

DUBBOArthas

Apache Dubbo是Alibaba開源的高效能RPC框架,在國內有非常多的使用者。 Github: https://github.com/apache/incubator-dubbo 文件:http://dubbo.incubator.apache.org/zh-cn/ Arthas是Alibaba

DUBBOArthas - 排查問題的實踐

Apache Dubbo是Alibaba開源的高效能RPC框架,在國內有非常多的使用者。 Github: https://github.com/apache/incubator-dubbo 文件:http://dubbo.incubator.apache.org/zh-