編輯:關於Android編程
原文地址:http://android.xsoftlab.net/training/notify-user/display-progress.html
通知中包含了一個進度指示器,用來向用戶展示一項正在進行中的工作狀態。如果你可以確保任務會花費多長時間,並且可以在任何時候得知它完成了多少工作,那麼就可以使用確定樣式的指示器(一個進度條)。如果不能確定任務需要花費的時間,可以使用不確定樣式的指示器(一個活動的指示器)。
進度指示器由ProgressBar類實現。
使用進度指示器,可以調用setProgress()方法。確定樣式與不確定樣式會在下面的章節中討論。
為了顯示確定進度指示器,需要調用setProgress(max, progress, false)方法將指示器添加到通知上,然後再將該通知發布出去。該方法的第三個參數用於指示該進度條是確定性進度條(true)還是不確定性進度條(false)。隨著操作的處理,進度progress會增長,這時需要更新通知。在操作結束時,progress應該等於max。一種常規的方式是將max設置為100,然後將progress以百分比的形式自增。
你也可以選擇在任務完成的時候將進度條取消顯示或者移除通知。在前一種情況中,要記得更新通知的文本,告訴用戶任務已完成。後一種情況中,調用setProgress(0, 0, false)就可以完成通知的移除。
int id = 1;
...
mNotifyManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle("Picture Download")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_notification);
// Start a lengthy operation in a background thread
new Thread(
new Runnable() {
@Override
public void run() {
int incr;
// Do the "lengthy" operation 20 times
for (incr = 0; incr <= 100; incr+=5) {
// Sets the progress indicator to a max value, the
// current completion percentage, and "determinate"
// state
mBuilder.setProgress(100, incr, false);
// Displays the progress bar for the first time.
mNotifyManager.notify(id, mBuilder.build());
// Sleeps the thread, simulating an operation
// that takes time
try {
// Sleep for 5 seconds
Thread.sleep(5*1000);
} catch (InterruptedException e) {
Log.d(TAG, "sleep failure");
}
}
// When the loop is finished, updates the notification
mBuilder.setContentText("Download complete")
// Removes the progress bar
.setProgress(0,0,false);
mNotifyManager.notify(id, mBuilder.build());
}
}
// Starts the thread by calling the run() method in its Runnable
).start();
最終的效果如下圖所示:
左邊的圖顯示了正在進行中的通知,而右邊的圖顯示了任務完成後的通知。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMiBpZD0="顯示持續活動的指示器">顯示持續活動的指示器
為了顯示不確定性的指示器,需要調用setProgress(0, 0, true)方法將進度條顯示在通知中,然後將該通知發布。第一第二個參數將會被忽略,第三個參數決定了該進度條是否是不確定性進度條。最終的顯示效果為與常規進度條有相同的顯示風格,除了它一直在動之外。
在操作開始之前請發布該通知,進度動畫會一直持續運行,直到你修改了通知。當操作完成後,調用setProgress(0, 0, false)方法然後更新通知以便移除活動指示器。否則的話,就算是任務完成後,該動畫也不會停止。所以要記得在任務完成後更改通知文本,以便告知用戶操作已完成。
// Sets the progress indicator to a max value, the current completion
// percentage, and "determinate" state
mBuilder.setProgress(100, incr, false);
// Issues the notification
mNotifyManager.notify(id, mBuilder.build());
找到前面的代碼,將下面部分替換。要記得setProgress()方法的第三個參數為true:
// Sets an activity indicator for an operation of indeterminate length
mBuilder.setProgress(0, 0, true);
// Issues the notification
mNotifyManager.notify(id, mBuilder.build());
最終的顯示效果如下:
不少玩家會想到將圖片拷貝到電腦中,然後用PS等工具去標注編輯加工,然在再發送到朋友圈或社交平台。那麼,轉來轉去,是不是也不太方便呢?其實Android手機也
新的Java8 API中提供了不少新的特性,其中就有Lambda表達式。而本文我們將主要介紹一下在Android開發過程中如何使用Lambda表達式,這裡主要是為我們後續
Android應用框架鼓勵開發者在開發應用時重用組件,本文將闡述如何用組件構建應用程序以及如何用intent將組件聯系起來。如需閱讀官方原文,請您點擊這個鏈接:《App
以下說明全部針對Android3.0(Api-11)。本指南將介紹三種基本菜單分別是PartA:操作欄(選項菜單OptionMenu)、PartB:上下文操作模式(Act