Android ListView滾動條配置完全解析
滾動條的相關顯示效果
先來看下ListView的滾動條有哪些顯示效果。
滾動條自身的外觀
這點不用說,就是滾動條自身的顏色,形狀等。Track的外觀
預設的ListView是沒有設定Track的。為了瞭解Track的含義,先看一張設定了Track之後的ListView效果。這是一個紅色的Track。
可以看到在設定了Track之後在右側滾動條下面出現一個貫穿整個ListView可見區域的紅色線條。所以Track表示的是滾動條滑動時的”軌道”。滾動條的大小
ListView是垂直滾動條,它的大小就是滾動條的寬度。滾動條的顯示位置
滾動條出現在ListView左邊,還是右邊,以及是顯示在內側還是外側。滾動條的Fade時間
滾動條只有在滾動的時候才會顯示,當停止滾動後,滾動條會在一段時間後漸漸消失。這裡有兩個時間點,一個是從停止滾動到開始消失的時間,一個是開始消失到完全消失的時間。
在XML中自定義ListView滾動條
自定義ListView滾動條可以直接在佈局檔案中對ListView進行配置。
先看下ListView在XML中有哪些和滾動條相關的配置選項。
android:scrollbars
android:scrollbarThumbVertical
android:scrollbarTrackVertical
android:scrollbarSize
android:verticalScrollbarPosition
android:scrollbarStyle
android:fadeScrollbars
android:scrollbarDefaultDelayBeforeFade
android:scrollbarFadeDuration
android:scrollbarAlwaysDrawVerticalTrack
android:fastScrollEnabled
android:fastScrollStyle
android:fastScrollAlwaysVisible
可以看到ListView中有非常多的和滾動條相關的配置選項。下面具體看下每個選項的含義及配置方法。
android:scrollbars
此選項表示是否顯示滾動條,它的取值可以是vertical,horizontal或none。
對ListView來說,它只能垂直滾動,將scrollbars設定成horizontal或者none效果都是一樣的,也就是不會出現滾動條。所以如果不希望ListView顯示滾動條,就將scrollbars設定成none。此外,如果scrollbars設定成none,那麼其他的滾動條相關的配置都不會有效果。android:scrollbarThumbVertical
此選項用來控制垂直滾動條的顯示外觀,這也是美化滾動條時最重要的一項配置。它可以設定為一個顏色值,或者是一個Drawable資源。對Drawable資源可以使用.9的png圖片,也可以使用XML來配置。
例如下面這個xml就定義了一個Drawable資源,其內部是一個從綠色到紅色的漸變色,四角有6dp的圓角,同時還有一個1dp的帶有透明度的黑色邊框。<shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="0" android:endColor="#FF0000" android:startColor="#00FF00" /> <corners android:radius="6dp" /> <stroke android:width="1dp" android:color="#A4000000" /> </shape>
將scrollbarThumbVertical設定為該Drawable資源後,顯示效果如圖所示。
android:scrollbarTrackVertical
此選項用來控制垂直滾動條背後滑動軌道的顯示效果。和android:scrollbarThumbVertical配置一樣,android:scrollbarTrackVertical可以設定為一個顏色值,或者是一個Drawable資源。
例如下面的xml,內部是一個#F1F0C1顏色的實心矩形,四角有6dp的圓角,同時還有一個1dp的帶有透明度的黑色邊框。<shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#F1F0C1" /> <corners android:radius="6dp" /> <stroke android:width="1dp" android:color="#A2000000" /> </shape>
將scrollbarTrackVertical設定為該Drawable資源後,顯示效果如圖所示。
android:scrollbarSize
此選項表示滾動條的大小,對ListView來說就是滾動條的寬度。
例如設定android:scrollbarSize=”3dp”,表示滾動條寬度為3dp。顯示效果如圖所示。
關於此項配置需要注意的是,如果android:scrollbarThumbVertical配置的是一個.9.png的圖片(自身有寬度的Drawable),那麼android:scrollbarSize配置會被忽略,只有android:scrollbarThumbVertica配置的是顏色值或者xml時(自身寬度為0的Drawable),此項配置才會有效。下面看下Android SDK的原始碼。
android.view.View類getVerticalScrollbarWidth()方法原始碼如下。public int getVerticalScrollbarWidth() { ScrollabilityCache cache = mScrollCache; if (cache != null) { ScrollBarDrawable scrollBar = cache.scrollBar; if (scrollBar != null) { int size = scrollBar.getSize(true); if (size <= 0) { size = cache.scrollBarSize; } return size; } return 0; } return 0; }
mScrollCache.scrollBarSize就是這裡配置的滾動條寬度。scrollBar是ScrollBarDrawable類的物件,其getSize()方法原始碼如下。
public int getSize(boolean vertical) { if (vertical) { return mVerticalTrack != null ? mVerticalTrack.getIntrinsicWidth() : mVerticalThumb != null ? mVerticalThumb.getIntrinsicWidth() : 0; } else { return mHorizontalTrack != null ? mHorizontalTrack.getIntrinsicHeight() : mHorizontalThumb != null ? mHorizontalThumb.getIntrinsicHeight() : 0; } }
mVerticalTrack,mVerticalThumb 就是android:scrollbarThumbVertical和android:scrollbarTrackVertical配置的Drawable物件,從這裡可以看到,只有android:scrollbarThumbVertical配置的Drawable物件的getIntrinsicWidth()方法返回的是小於等於0的值,才會使用mScrollCache.scrollBarSize作為滾動條的寬度。關於Drawable物件的getIntrinsicWidth()方法何時返回大於0的值,何時返回小於等於0的值,這裡不再探究,有興趣的可以再繼續翻原始碼。
android:verticalScrollbarPosition
此項配置用來設定滾動條的位置,它可以是right,left或者是defaultPosition。如果不設定,預設是defaultPosition。如果是defaultPosition,則滾動條的位置受到佈局RTL配置的影響,如果佈局是從右往左,則滾動條顯示在left側,如果佈局是從左往右,則滾動條顯示在right側。
注意:滾動條沒有上下位置的設定。對於可水平滾動的View(如HorizontalScrollView),滾動條始終在下方。不能設定到上方。android:scrollbarStyle
此項配置也是用來設定滾動條的位置,不過不是左右位置,而是滾動條和ListView內容之間的相對位置,它的取值範圍是insideoverlay,insideInset,outsideoverlay,outsideinset。
對一個View來說,它的內部可用區域是View自身大小再減去padding後的區域。- insideoverlay:表示滾動條右側和ListView可用區域右側對其,且覆蓋在Item之上。
- insideInset:表示滾動條右側和ListView可用區域右側對其,但不覆蓋在Item之上,而是將Item擠到滾動條的左邊。
- outsideoverlay:表示滾動條右側和ListView右側對其,且覆蓋在右側padding之上。
- outsideinset:表示滾動條右側和ListView可用區域右側對其,但不覆蓋在padding之上,而是將padding擠到滾動條的左邊。
android:fadeScrollbars
此項配置用來表示是否在ListView不滾動時隱藏滾動條,可以選擇true或false,預設為true,也就是不滾動時隱藏。如果將其設定為false,那麼只要ListView能夠滾動,滾動條就會一直顯示,不會隱藏。但如果ListView不足一頁,不能滾動,則不會顯示。此外,如果配置了android:scrollbarTrackVertical,也就是滾動條的Track,然後設定fadeScrollbars為不隱藏滾動條,那麼不僅滾動條不會隱藏,滾動條的Track同樣也不會隱藏。android:scrollbarDefaultDelayBeforeFade
此項配置表示滾動條從顯示到隱藏的間隔時間,單位為毫秒,如果不設定,預設為300毫秒。例如,設定android:scrollbarDefaultDelayBeforeFade=”1200”,表示停止滾動後1.2秒後開始隱藏滾動條。需要注意的是,ListView初次載入完成時,會自動顯示出滾動條。這時如果沒有去做滑動操作,滾動條也會自動隱藏,不過和滑動後隱藏不同的是,這裡需要經過4倍間隔時間後才會開始隱藏。可以在Android SDK原始碼android.view.View類的initialAwakenScrollBars()方法中找到這塊程式碼。android:scrollbarFadeDuration
此項配置表示滾動條從滾動條開始隱藏到完全隱藏的間隔時間,單位為毫秒,如果不設定,預設為250毫秒。例如,設定android:scrollbarDefaultDelayBeforeFade=”2000”,表示開始隱藏滾動條後2秒後完全隱藏,中間是一個滾動條逐漸透明的過程。android:scrollbarAlwaysDrawVerticalTrack
此項配置表示是否總是顯示垂直滾動條的Track,可以選擇true或false,預設為false。通常,如果設定了滾動條的Track,那麼Track會隨著滾動條一起顯示和隱藏。但如果設定了android:scrollbarAlwaysDrawVerticalTrack為true,則滾動條的Track將一直顯示,不會隱藏。當然,如果沒有配置android:scrollbarTrackVertical,即使設定了android:scrollbarAlwaysDrawVerticalTrack為true,也不會有Track顯示。此外,android:fadeScrollbars配置為false,則無論android:scrollbarAlwaysDrawVerticalTrack配置為true還是false,Track都不會隱藏。android:fastScrollEnabled
此項配置表示是否啟用快速滾動條,可以選擇true或false,預設為false,也就是不使用快速滾動條。如果啟用了快速滾動條,當ListView頁數小於4頁時,仍然會顯示普通滾動條,當ListView頁數超過4頁時,才會顯示快速滾動條。前面的10項配置除了android:verticalScrollbarPosition之外,都只對普通滾動條有效果,對快速滾動條沒有影響。但android:verticalScrollbarPosition配置會影響快速滾動條,如果設定android:verticalScrollbarPosition為left,則快速滾動條也會顯示在ListView的左側。此外,當快速滾動條顯示時,普通滾動條會自動隱藏,即使普通滾動條設定為不隱藏。當快速滾動條隱藏時,普通滾動條會自動顯示,除非設定為不顯示(android:scrollbars=”none”)(從Android 5.0開始,快速滾動條隱藏時,普通滾動條不再顯示)。android:fastScrollStyle
此項配置用來設定快速滾動條的樣式,其可配置的值,及含義和android:scrollbarStyle一樣。不過此項配置是從Android5.0才開始有的,所以只有Android5 .0以上的系統中,此項配置才會有效。android:fastScrollAlwaysVisible
此項配置用來設定是否始終顯示快速滾動條,可以選擇true或false,預設為false,如果將其設定為true,則快速滾動條將始終顯示,不會隱藏,且不受4頁的約束,也就是說ListView即使不足4頁,快速滾動條也會顯示,甚至即使ListView不足一頁,快速滾動條都會顯示。此外,android:fadeScrollbars設定將不會生效,也就是即使android:fadeScrollbars設定為false,也不會顯示普通滾動條。fastScroll的其他配置
當啟用了快速滾動條後,在佈局檔案中只提供了快速滾動條樣式和是否始終可見的設定。並沒有像普通滾動條一樣的可以用自定義的Drawable來替代預設的圖示的配置選項,也沒有提供對Track的配置。要想修改快速滾動條的圖示和Track,可以在ListView所在的Activity的theme中來配置(如果Activity沒有配置Theme,則在Application的theme中配置)。theme中支援的配置項有- android:fastScrollThumbDrawable
- android:fastScrollOverlayPosition
- android:fastScrollTextColor
- android:fastScrollTrackDrawable
- android:fastScrollPreviewBackgroundLeft
- android:fastScrollPreviewBackgroundRight
這些配置項都是從API 11,也就是Android 3.0開始支援的。其中fastScrollThumbDrawable和fastScrollTrackDrawable就是用來配置快速滾動條的圖示及Track圖示的。
相關推薦
Android ListView滾動條配置完全解析
滾動條的相關顯示效果 先來看下ListView的滾動條有哪些顯示效果。 滾動條自身的外觀 這點不用說,就是滾動條自身的顏色,形狀等。 Track的外觀 預設的ListView是沒有設定Track的。為了瞭解Track的含義,先看一張設定了Track之後
Android listview滾動條隱藏後依然顯示
剛剛做了一個評論的功能,然後listview屬性android:scrollbars="none"我明明把滾動條隱藏了,為什麼當評論有很多條的時候還繼續存在呢?上網搜了一下listview的屬性,發現有這麼一個android:fastScrollEnabled東西 f
Android任務和返回棧完全解析,細數那些你所不知道的細節
本篇文章主要內容來自於Android Doc,我翻譯之後又做了些加工,英文好的朋友也可以直接去讀原文。任務和返回棧一個應用程式當中通常都會包含很多個Activity,每個Activity都應該設計成為一個具有特定的功能,並且可以讓使用者進行操作的元件。另外,Activity之
Activity原始碼之Android 6.0許可權相關完全解析
我們都知道Android6.0以前許可權的申請非常簡單,只需要在mainfest宣告所需的許可權即可。而6.0以後,Android將許可權的管理進一步嚴格化,它要求使用者在使用某些敏感許可權時,必須在mainfest中先宣告之後再動態申請。在一定程度上約束了
android LiveFolder(活動資料夾) 完全解析
如果大家對 ContentProvider 還不熟悉的話 先看看這兩篇文章把 ContentProvider整的明白些 看起來會更順利。 【android 自定義 Content Provider示例】[url]http://byandby.iteye.com/blog/83
Android 響應式程式設計 RxJava2 完全解析
使用了 RxJava2 有一段時間了,深深感受到了其“牛逼”之處。下面,就從 RxJava2 的基礎開始,一步步與大家分享一下這個強大的非同步庫的用法!RxJava 是 一個在 Java VM 上使用可觀測的序列來組成非同步的、基於事件的程式的庫,也就是用於實現
Android 網路通訊框架Volley完全解析(一)
Volley簡介及Request基本用法 Google I/O 2013上,Volley釋出了。Volley是Android平臺上的網路通訊庫,能使網路通訊更快,更簡單,更健壯。這是Volley名
Android-ScrollView滾動條的使用
ScrollView 1、概述 滾動檢視是指當擁有很多內容,螢幕顯示不完時,需要通過滾動來顯示完整的檢視。 2、種類 HorizontalScrollView:水平滾動檢視 ScrollView:垂直滾動檢視 3、常用屬性
Android View 繪製流程(Draw) 完全解析
前言 前幾篇文章,筆者分別講述了DecorView,measure,layout流程等,接下來將詳細分析三大工作流程的最後一個流程——繪製流程。測量流程決定了View的大小,佈局流程決定了View的位置,那麼繪製流程將決定View的樣子,一個View該顯示什麼
wpf listview 滾動條寬度設定
網上資料真的好少,找了很多都是更改樣式,最後自己亂搞搞出來了。 滾動條的標籤叫:ScrollBar ,但是ScrollBar不能寫出來,否則會報錯,但是如果listView控制元件它的資料比較多的時候,ScrollBar程式會自動加進去 。所以只需在資原始檔中設定滾動條的樣
[Android]ListView滾動時itemview背景色變成黑色的解決方式
在使用listView的過程中,偶然也會遇到一些小問題,比如在listview中除錯背景色的過程中會遇到這樣或那樣的問題.比如我指定某行高亮之後, 然後就讓我遇到了一個比較經典的issue,在拖動的
Android之硬碟快取DiskLrucache完全解析
概述 記得在很早之前,我有寫過一篇文章 Android高效載入大圖、多圖解決方案,有效避免程式OOM ,這篇文章是翻譯自Android Doc的,其中防止多圖OOM的核心解決思路就是使用LruCache技術。但LruCache只是管理了記憶體中圖片的儲存與釋放,
Android ListView滾動到指定的位置
本文介紹的關於ListView移動到指定位置有兩種方法,下面話不多說,直接來看示例程式碼: ? 1 listview.setSelection(position); ? 1 listview.smoothScrollToP
Android ListView工作原理完全解析,帶你從原始碼的角度徹底理解
在Android所有常用的原生控制元件當中,用法最複雜的應該就是ListView了,它專門用於處理那種內容元素很多,手機螢幕無法展示出所有內容的情況。ListView可以使用列表的形式來展示內容,超出螢幕部分的內容只需要通過手指滑動就可以移動到螢幕內了。另外ListView還
Android ListView的滾動條樣式
使用ListView FastScroller,預設滑塊和自定義滑塊圖片的樣子如下兩圖:設定快速滾動屬性很容易,只需在佈局的xml檔案裡設定屬性即可: <ListView android:id="@+id/listView" android:la
android listview gridview等自定義滾動條樣式(非反射)
在drawable裡建立一個scrollbar.xml,內容如下 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#
Android開發之Tween(補間動畫)完全解析(上)——xml檔案配置的實現
相信不管做了多長時間開發的人都用過Tween動畫,從剛開始工作到現在我也是用了N次Tween動畫,但是每一次使用總感覺掌握的不夠全面,所以花了點時間詳細的總結了下Tween動畫,其實在androi
Android屬性動畫完全解析(上),初識屬性動畫的基本用法
fcm 操作 fad 擴展性 改變 內部使用 如果 轉載 @override 轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/43536355 在手機上去實現一些動畫效果算是件比較炫酷的事情,因此Andr
Android studio 2.2新特性介紹,ConstraintLayout完全解析
穩定 iss 項目 ide 了解 需要 應用 let 左右 轉載郭霖大神的文章,轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/53122387 我正常寫隨筆,都是看了別人的文章,自己使用,把自己的體驗心得,
Android ToolBar 使用完全解析
都是 主題 image 需要 oid primary 調用 blank ast ToolBar簡介 ToolBar是Android 5.0推出的一個新的導航控件用於取代之前的ActionBar,由於其高度的可定制性、靈活性、具有Material Design風格等優點,