Android中的View對(duì)于ScrollBar和Scroll的支持是非常靈活的,不僅僅是UI樣式可變,計(jì)算參數(shù)的方式也是可變的。 在Android中,任何View都可以顯示出ScrollBar,唯一的條件是自身高度不足以顯示全部?jī)?nèi)容。
在UI元素上,ScrollBar由兩部分組成,一個(gè)是Track(滑道),一個(gè)是Thumb(滑塊),這兩部分都是可以定制的(指定自定義的drawable),另外ScrollBar的寬度(豎向)或高度(橫向)也是可以控制的,相關(guān)的控制屬性是:
android:scrollbarThumbHorizontal
android:scrollbarThumbVertical
android:scrollbarTrackHorizontal
android:scrollbarTrackVertical
android:scrollbarSize
ScrollBar分為豎向的和橫向的,也可以強(qiáng)制去掉,控制這一點(diǎn)的屬性是:android:scrollbars 對(duì)于豎向的ScrollBar,我們還可以控制它是顯示在左邊還是右邊,控制這一點(diǎn)的函數(shù)是:setVerticalScrollbarPosition 橫向ScrollBar只能顯示在下面。
ScrollBar還有淡出效果,在時(shí)間參數(shù)和是否允許淡出方面,我們是可以控制的:
android:fadeScrollbars
android:scrollbarDefaultDelayBeforeFade
android:scrollbarFadeDuration
在ScrollBar淡出之后,ScrollBar一般是完全看不見的,但是我們可以選擇Track始終可見:
android:scrollbarAlwaysDrawHorizontalTrack
android:scrollbarAlwaysDrawVerticalTrack
android:isScrollContainer是一個(gè)令人迷惑的屬性,設(shè)置它或者不設(shè)置它,有時(shí)并不能帶來明顯的區(qū)別。如果設(shè)置為true且它的子View包含EditText,并且連接到輸入法(此時(shí)軟鍵盤會(huì)彈出 ),那么軟鍵盤會(huì)盡大可能擠壓該View,那樣的話,該View的整個(gè)內(nèi)容都會(huì)出現(xiàn)在軟鍵盤之上,而不是部分內(nèi)容被遮住。但是即使不設(shè)置該屬性,有時(shí)仍然能達(dá)到上述效果,這是因?yàn)?Android在擠壓View的時(shí)候,也會(huì)考慮其它因素,設(shè)置該屬性可以在這方面得到一個(gè)保證。下面的問答很好的解釋了這個(gè)屬性的意義和原理:http://stackoverflow.com/questions/5308247/what-does-androidisscrollcontainer-do
android:scrollbarStyle控制著ScrollBar的顯示位置和樣式,可取的值如下:
insideOverlay
insideInset
outsideOverlay
outsideInset
inside表示顯示在padding區(qū)域的內(nèi)側(cè),outside表示顯示在padding區(qū)域的外側(cè)。 Inset表示將自動(dòng)增加padding以顯示ScrollBar(這意味著內(nèi)容區(qū)域?qū)⒖s?。?,Overlay表示不會(huì)增加padding以顯示ScrollBar,而是浮動(dòng)在內(nèi)容上面(可能會(huì)遮住內(nèi)容)。
以下是幾個(gè)自定義方法,View提供了默認(rèn)實(shí)現(xiàn),具體類還需自己實(shí)現(xiàn),如果有必要的話:
computeHorizontalScrollExtent
computeHorizontalScrollOffset
computeHorizontalScrollRange
computeVerticalScrollExtent
computeVerticalScrollOffset
computeVerticalScrollRange
computeScroll
以下方法可以在實(shí)現(xiàn)的時(shí)候調(diào)用:
canScrollHorizontally
canScrollVertically
awakenScrollBars