Android 高級控件(2)

本篇繼續(xù)學習高級控件及獨具特色的監(jiān)聽器佳谦,目錄如下:

1. ScrollView 滾動視圖

2. ProgressBar 進度條

3. ProgressDialog 對話框形式進度條

4. SeekBar 可拖動進度條

5. DataPicker 日歷選擇器

6. DataPickerDialog 對話框形式日歷選擇器

7. TimePicker 時間選擇器

8. TimePickerDialog 對話框形式時間選擇器

1.ScrollView 滾動視圖

當展示的內容很多屏幕顯示不下時就需要用ScrollView來顯示完整的視圖。下圖對比了有無ScrollView兩種不同的情況:

可以看到當整個頁面只有一個TextView時因為內容不完整視覺上感覺很不好哪雕,如果加上ScrollView富弦,用戶就可以滑動滾動條看到后面的內容铁孵。ScrollView使用起來也很容易桃漾,只要將TextView作為它的子標簽就可以了祥山,如果不想看到滾動條葱蝗,可以設置屬性android:scrollbars="none"隱藏起來痊剖。另外,根據(jù)需要也可以使用水平滾動視圖HorizantalScrollView垒玲,替換SrollView標簽就可以了陆馁。

之后在MainActivity獲取TextView實例并set內容,運行之后就能看到之前的效果了合愈。

再介紹一個監(jiān)聽器OnTouchListener叮贩,它可以監(jiān)聽ScrollView滑行情況,比如希望用戶看完文本后繼續(xù)添加一些文本內容佛析,那么就可以在監(jiān)聽到ScrollView到達底部的事件后做出相應的動作益老,代碼見下:

有必要對上述代碼做一些解釋:從event.getAction()可以監(jiān)聽到滑塊各種狀態(tài),其中一種狀態(tài)MotionEvent.ACTION_MOVE表示滑塊在滑動的過程中寸莫。接下來在判斷文本處于最頂端還是最低端時捺萌,使用了ScrollView三個測量高度的方法:scrollView.getChildAt(0).getMeasuredHeight()表示ScrollView第一個子標簽即TextView文本內容總長度,scrollView.getHeight()表示ScrollView高度即屏幕總高度膘茎,scrollView.getScrollY()表示滾動條滑動距離桃纯。易得出當滑動距離+屏幕總高度=文本總長度時酷誓,正好到達文本最低端。調試結果如圖:

2.ProgressBar 進度條

ProgressBar通常用于展示某個耗時操作完成的進度态坦,來更好的提升用戶界面的友好性盐数。首先來學習ProgressBar幾個關鍵屬性:

max:最大顯示進度

progress:第一顯示進度

secondaryProgress:第二顯示進度

三者關系見圖:

style:進度條的類型,上圖顯示了四種常見的類型--大伞梯、中玫氢、小環(huán)形進度條以及水平進度條。其實每種類型的進度條顯示風格也是多種多樣的谜诫,以水平進度條舉例漾峡,實際上style可選值中@android:style/下系統(tǒng)還提供了更多可選風格,比如選擇第一項:

進度條就換了個風格喻旷。

ctrl點進去看這個style源碼灰殴,發(fā)現(xiàn)整個進度條風格由很多Item共同組成,比如通過第二項progressDrawable就可以實現(xiàn)自定義一個進度條樣式了掰邢。

介紹完ProgressBar幾個關鍵屬性后牺陶,再通過一個小demo學習它的幾個關鍵方法。在布局里準備三個button和一個textview辣之,用于控制進度條加減和重置以及顯示進度條具體進度數(shù)據(jù)掰伸。

接著在MainActivity獲取到所有控件的實例并給所有按鈕都設置好監(jiān)聽器。為了顯示初始進度百分比怀估,從ProgressBar三個get方法分別獲取到三個進度數(shù)值狮鸭,經(jīng)過相應的計算便可以得到了。

按鈕監(jiān)聽事件中多搀,進度的重置直接用set方法歧蕉,而進度的增加和減少就需要increment方法,參數(shù)為正數(shù)即加康铭,負數(shù)即減惯退。這里讓進度條每次變化十個百分比。

運行后點擊增加按鈕效果見圖从藤,減少和重置功能也能很好的完成:

3.ProgressDialog 對話框形式進度條

學習完ProgressBar催跪,趁熱打鐵,看看Dialog的進度條如何做到夷野。直接在上個demo布局最后再添加一個Button懊蒸,用于打開一個ProgressDialog,給它設置監(jiān)聽器后悯搔,在點擊事件里完成一個ProgressDialog的代碼見下:

用ProgressDialog的各種set方法設置了對話框頁面風格(進度條樣式骑丸、標題和圖標)、進度條屬性和一個名為“確認”的按鈕以及對應的點擊事件,且這個對話框可通過返回鍵取消通危,最后一定要有progressDialog.show()否則之前設置都功虧一簣對話框是無法彈出來的铸豁。另外再說明一個方法setIndeterminate(),當值為true表示不精確顯示進度條黄鳍,比如環(huán)形進度條就會一直轉圈推姻,而值為false表示精確顯示進度條平匈,比如此例中水平進度條下就會顯示刻度框沟。運行程序后結果如下:

當點擊確定按鈕之后,確實彈出一個查看成功的Toast增炭。

4.SeekBar 可拖動進度條

在我們調整音量或者聽歌的時候忍燥,會有這樣的進度條上面帶有滑塊允許用戶拖動以改變當前進度的大小,這就是SeekBar隙姿。因為都是進度條梅垄,SeekBar的關鍵屬性就不多說了,這里認識一個監(jiān)聽器OnSeekBarChangeListener输玷,用于監(jiān)聽SeekBar上滑塊運行狀態(tài)队丝。接下來通過一個小例子學習如何使用,先準備這樣一個布局:

在MainActiviity給SeekBar注冊監(jiān)聽器并具體實現(xiàn)三個方法欲鹏,對應滑塊三個狀態(tài)机久,其中onProgressChanged()方法會返回當前進度progress數(shù)值使之顯示在第一個文本框。

運行結果如下赔嚎,“開始拖動”一瞬間很快就進入到“正在拖動”的狀態(tài)膘盖。

5.DataPicker 日歷選擇器

當我們在備忘錄寫每日行程或設置鬧鐘的時候必不可少需要填寫日期和時間,安卓有提供相應的選擇器尤误,幫助我們快速選擇日期和時間侠畔,剩下部分就來介紹這些Picker。

DataPicker日歷選擇器可選擇年月日损晤,下圖預覽可看到就是一個很常見的日歷软棺。

既然是選擇器,那么肯定可以監(jiān)聽到用戶選擇的內容尤勋,所以每個選擇器固然有對應的監(jiān)聽器÷氲常現(xiàn)在做這樣的小demo來看監(jiān)聽器的作用,標題欄顯示當前日期和時間斥黑,每當用戶在DataPicker上選擇一個日期后揖盘,標題欄實時變化以顯示當前選擇的日期。

先利用系統(tǒng)提供的Calendar類可獲取到當前年月日時分锌奴,這里注意Calendar計算月是從0開始兽狭。初始時標題欄顯示當前時間。

DataPicker想要注冊監(jiān)聽器OnDateChangedListener,要通過它的一個方法init()并提供四個參數(shù)箕慧,前三個參數(shù)正是之前獲取的年月日服球,表示初始時日歷上所顯示的日期,注意月份的計算和Calendar相同颠焦,所以不需要加1斩熊,第四個參數(shù)是監(jiān)聽器對象。觸發(fā)事件后會返回被用戶選擇的年月日三個參數(shù)伐庭,再顯示到標題上即可粉渠。

看看運行后效果吧!

6.DataPickerDialog 對話框形式日歷選擇器

根據(jù)不同的需求圾另,還可以通過對話框的形式選擇日期霸株。方法是直接在代碼中new一個DataPickerDialog對象,再show()出來就完成了集乔。和DataPicker非常相似的去件,初始化DataPickerDialog的時候需要五個參數(shù),第一個參數(shù)是上下文扰路,然后就是監(jiān)聽器OnDateSetListener對象尤溜,之后才是年月日。

此時程序一啟動會先彈出一個對話框汗唱,用戶可直接選擇日期宫莱,確定后就可以看到剛剛選擇的日期顯示在標題上了。

7.TimePicker 時間選擇器

下面來看看可選擇時分的TimePicker 時間選擇器渡嚣,可在鐘表上先選擇小時的數(shù)值梢睛,再選擇分鐘的數(shù)值。

比DataPicker簡單的是识椰,它可以直接通過setOnTimeChangedListener()方法注冊監(jiān)聽器OnTimeChangedListener绝葡,就不需要提供其他參數(shù)了。這里同樣地在事件觸發(fā)后讓標題顯示被選擇的時分腹鹉。

運行后:

8.TimePickerDialog 對話框形式時間選擇器

最后一個TimePickerDialog藏畅,學到現(xiàn)在,是不是能很容易掌握了功咒?注冊監(jiān)聽器OnTimeSetListener過程如下:

運行:

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末愉阎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子力奋,更是在濱河造成了極大的恐慌榜旦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件景殷,死亡現(xiàn)場離奇詭異溅呢,居然都是意外死亡澡屡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門咐旧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驶鹉,“玉大人,你說我怎么就攤上這事铣墨∈衣瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵伊约,是天一觀的道長姚淆。 經(jīng)常有香客問我,道長碱妆,這世上最難降的妖魔是什么肉盹? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任昔驱,我火速辦了婚禮疹尾,結果婚禮上,老公的妹妹穿的比我還像新娘骤肛。我一直安慰自己纳本,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布腋颠。 她就那樣靜靜地躺著繁成,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淑玫。 梳的紋絲不亂的頭發(fā)上巾腕,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音絮蒿,去河邊找鬼尊搬。 笑死,一個胖子當著我的面吹牛土涝,可吹牛的內容都是我干的佛寿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼但壮,長吁一口氣:“原來是場噩夢啊……” “哼冀泻!你這毒婦竟也來了?” 一聲冷哼從身側響起蜡饵,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弹渔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后溯祸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肢专,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡巾乳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸟召。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胆绊。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖欧募,靈堂內的尸體忽然破棺而出压状,到底是詐尸還是另有隱情,我是刑警寧澤跟继,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布种冬,位于F島的核電站,受9級特大地震影響舔糖,放射性物質發(fā)生泄漏娱两。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一金吗、第九天 我趴在偏房一處隱蔽的房頂上張望十兢。 院中可真熱鬧,春花似錦摇庙、人聲如沸旱物。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宵呛。三九已至,卻和暖如春夕凝,著一層夾襖步出監(jiān)牢的瞬間宝穗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工码秉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逮矛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓泡徙,卻偏偏與公主長得像橱鹏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子堪藐,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容