一、前言
ProgressBar本身代表了進度條組件,它還派生出了兩個常用的組件:SeekBar和RatingBar,他們的使用方法類似,只是顯示界面有一定的區別。我們看一下API文檔中的說明:
從圖中我們是可以直接看到ProgressBar繼承自View類,直接子類有AbsSeekBar和ContentLoadingProgressBar,間接子類有RatingBar和SeekBar。下面依次介紹一下這幾個控件的使用方法。
二、ProgressBar
ProgressBar是界面用於與用戶交互的一個組件,用來提升用戶友好度,通常用於向用戶展示某個耗時操作時,用於展示完成的百分比,不至於讓用戶覺得程序失去了響應。在API文檔中,我們看到他所支持的XML屬性有如下:
xml屬性名稱 | 說明 |
android:animationResolution | 動畫超時時間,必須是整數值,比如“100” |
android:indeterminate | 該屬性設置為true,表示不精確顯示進度 |
android:indeterminateBehavior | 設置當選擇不精確顯示進度時,如何描述到達最大值 |
android:indeterminateDrawable | 設置當選擇不精確顯示進度時,所繪制的drawable對象 |
android:indeterminateDuration | 設置不精確顯示進度的持續時間 |
android:indeterminateOnly | 設置只采用不精確顯示進度模式(狀態保持模式將不會工作) |
android:interpolator | |
android:max | 設置進度可以達到的最大值 |
android:maxHeight | 可選參數 設置View的最大高度 |
android:maxWidth | 可選參數 設置View的最大寬度 |
android:minHeight | 可選參數 設置View的最小高度 |
android:minWidth | 可選參數 設置View的最小寬度 |
android:mirrorForRtl | 定義如果是否需要反映在RTL模式的相關畫板,默認為false |
android:progress | 設置該進度已完成的進度值 |
android:progressDrawable | 設置該進度條軌道對應的drawable對象 |
android:secondaryProgress | 二級進度條,主要用於緩存使用的場景 |
該表格取自API19文檔
進度條支持多種風格,可以直接通過設置style屬性來設置,API中也給出了如下的屬性:
Widget.ProgressBar.Horizontal 水平進度條
Widget.ProgressBar.Small 小環形進度條
Widget.ProgressBar.Large 大環進度條
Widget.ProgressBar.Inverse 普通大小的環形進度條
Widget.ProgressBar.Small.Inverse 小環形進度條
Widget.ProgressBar.Large.Inverse 大環形進度條
另外一種使用方式就是可以使用系統的ATT屬性例如:
- style="?android:attr/progressBarStyle"
- style="?android:attr/progressBarStyleHorizontal"
- style="?android:attr/progressBarStyleInverse"
- style="?android:attr/progressBarStyleLarge"
- style="?android:attr/progressBarStyleLargeInverse"
- style="?android:attr/progressBarStyleSmall"
- style="?android:attr/progressBarStyleSmallInverse"
- style="?android:attr/progressBarStyleSmallTitle"
例如如下的代碼:
對於瘋狂講義3上的示例,我實際操作並沒有成功,自定義進度條雖然按照書上的示例操作, 但是顯示上兩個圖標重疊,並不能按照進度情況顯示,代碼如下:
而顯示效果卻是:
而在實際運行效果也是后台的模擬線程在更新UI上也是沒有按照預想的結果執行,一開始顯示的都是底部紅色圖片,一直不動,然后一下全更新成這種重疊圖片了。
找了半天原因也不知道哪里出了問題,這個問題暫時記錄一下,等抽空再解決。(API22的模擬器出現的顯示問題)
網上找了進度條的示例,感覺也不是很完整,學起來不是很系統,想想android自帶的sdk中有示例,就把它找出來了,我們先看一下效果:
示例的位置在&AndroidSDK&\samples\android-19\legacy\ApiDemos\src\com\example\android\apis\view 這個文件夾下,可以看到
這4個JAVA文件,就是對應的4個進度條代碼。
而對應的布局文件可以向上級res文件夾下去找。代碼這里不再附上了。自己去找DEMO吧,我承認這個,我學的有點郁悶,標記一下。
三、SeekBar
SeekBar是滑動條,他與進度條的不同時一般進度條都是用顏色填充進度,而滑動條則是用滑塊表示進度數值,而且允許用戶通過拖動滑塊來改變數值,例如Windows的音量調節:
就是一個滑動條。滑塊的樣式則是通過 android:thumb 屬性來指定。
下面做一個簡單的小例子,顯示結果就是在textView上顯示拖動滑塊改變的值。
簡單的效果:
獲取拖動的值需要設置他的 setOnSeekBarChangeListener 這個監聽器,重寫他的方法。上方右邊的示例則是自定義了他的滑道,代碼在下面一塊給出。
首先給出滑道的樣式定義(progress_drawable.xml):
下面是示例主頁面的樣式布局:
如果想模仿windows的調整音量的滑塊,只需要在內部的線性布局的最前面再加個ImageView就可以做出差不多的效果。
這是后台代碼,主要是監聽器的實現。
這些只是SeekBar的基本用法,當然也可以多種實現,如下是在網上看到的網友做的效果:
四、RatingBar
星級評分條,其實也是一種拖動條,只是與拖動條的區別在於它提供星星來表示進度。常見的屬性如下:
屬性 | 說明 |
android:isIndicator | 設置該星級評分是否允許用戶該表(true為不允許改變) |
android:numStars | 設置該星級評分條總共有多少星星 |
android:rating | 設置該星級評分條默認的星級 |
android:stepSize | 設置每次最少需要改變多少個星級 |
我們來做一個簡答的例子來演示這些屬性:
同樣先看一下效果:
然后我們給出布局文件:
其中max和progress是進度條中的屬性,因為RatingBar本身就是一個特殊的進度條,設置了最大值是100,5顆星顯示,說明一顆星是20,步進0.5,說明一次至少可以選擇半顆星。
后台主要是處理了改變時的監聽器。
五、后記
最近雜事繁多,學習的進度減慢了,遇到問題也卡了很久,有些問題需要多深入的學習一下,多看看SDK中的示例和API文檔。下面的章節會跳過一些簡單控件的使用,給出SDK中示例代碼的位置。不再在博客上浪費空間了。加快學習進度。