編輯:Android開發實例
前言
本章內容為Android開發者指南的 Framework Topics/User Interface/Notifications/Toast Notifications章節,譯為"媒體播放",版本為Android 4.0 r1,翻譯來自:"呆呆大蝦",。
Toast通知
譯者署名: 呆呆大蝦
譯者微博:http://weibo.com/popapa
版本:Android 4.0 r1
聲明
本文整理自原作者:http://leybreeze.com/?p=461
原文
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
快速查看
Toast是一種只在屏幕上顯示一小會兒的消息,它沒有焦點(也不暫停當前的activity),因此也不能接受用戶的輸入。
可以通過定制toast的布局來顯示圖片。
在本文中:
基礎知識
定位Toast
創建自定義Toast視圖
關鍵類
Toast
toast通知是一種在窗口表面彈出的消息。它只占用信息顯示所需的空間,用戶當前的activity仍保持可見並可交互。該通知自動實現淡入淡出,且不接受人機交互事件。
以下截圖展示了鬧鐘程序的toast通知示例。一旦鬧鐘被打開,就會顯示一條toast作為對設置的確認。
toast能被Activity 或Service創建並顯示。如果由Service創建,則toast會顯示在當前已獲得焦點的Activity前面。
如果需要用戶對通知進行響應,可以考慮使用Status Bar Notification。
基礎知識
首先,用某個makeText()方法來實例化一個Toast對象。該方法有三個參數:應用程序上下文Context、文本信息和toast的持續顯示時間。它將返回一個已正確初始化的Toast對象。可以用show()方法來顯示該toast通知,示例如下:
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
上例演示了大部分toast通知需要的所有內容,應該不大會需要用到其他內容了。不過,你也許想在其他位置顯示toast或是要用自己的布局替換默認相對簡單的文本消息,下一節將描述如何完成。
還可以將多個方法鏈接起來寫,以避免持久化Toast對象,就像這樣:
Toast.makeText(context, text, duration).show();
定位Toast
標准的toast通知左右居中地顯示在屏幕底部附近。可以通過setGravity(int, int, int)方法來改變顯示位置。它接受三個參數:重力常量常數Gravity,X方向偏移和Y方向偏移。
例如,如果決定把toast置於左上角,可以這樣設置重力常數:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
如果想讓位置向右移,就增加第二個參數的值;要向下移,就增加最後一個參數的值。
創建自定義的Toast視圖
如果不滿足於簡單的文本消息,還可以為toast通知創建一個自定義布局。要創建自定義布局,需要用XML或程序代碼定義一個View布局,然後把根View對象傳給setView(View)方法。
例如,可以用以下的XML(保存為toast_layout.xml)創建出右邊截圖中所示的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:background="#DAAA"
>
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="10dp"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#FFF"
/>
</LinearLayout>
注意,LinearLayout元素的ID是“toast_layout”。必須用這個ID從XML中解析出布局,如下:
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
(ViewGroup) findViewById(R.id.toast_layout_root));
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello! This is a custom toast!");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
首先,用getLayoutInflater()(或getSystemService())來讀取LayoutInflater,然後用inflate(int, ViewGroup)將布局(layout)從XML中解析出來。第一個參數是layout資源ID,第二個參數是根View。可以用解析出來的layout獲取其他View對象,之後獲取並定義ImageView和TextView元素的內容。最後,用Toast(Context)創建一個新的toast,設置一些屬性如gravity和duration等。然後調用setView(View)並將解析出的layout傳入。現在就可以調用show()來顯示自定義布局的toast了。
注意:除非想用setView(View)來定義布局,否則不要用公共構造方法來構造Toast。如果沒有可用的自定義布局,則必須使用makeText(Context, int, int)來創建Toast。
Android當道,現在學習Android開發還晚嗎?寫下這個問題的時間是–2014年6月15號,我會回答:不晚,Android至少還能在活躍10年!所以答應自己
前面文章介紹了Android利用麥克風采集並顯示模擬信號的實現方法,這種采集手段適用於無IO控制、單純讀取信號的情況。如果傳感器本身需要包含控制電路(例如采集血氧
項目打包生成apk過程: 1、生成簽名文件,並且指定所在位置 2、使用生成的簽名文件,給工程打包生成一個apk 生成簽名文件,並且指定所在位置
Android性能優化-布局優化 今天,繼續Android性能優化 一 編碼細節優化。 編碼細節,對於程序的運行效率也是有很多的影響的。今天這篇主題由於