天天看點

ScrollBar

Android中的View對于ScrollBar和Scroll的支援是非常靈活的,不僅僅是UI樣式可變,計算參數的方式也是可變的。

     在Android中,任何View都可以顯示出ScrollBar,唯一的條件是自身高度不足以顯示全部内容。

     在UI元素上,ScrollBar由兩部分組成,一個是Track(滑道),一個是Thumb(滑塊),這兩部分都是可以定制的(指定自定義的drawable),另外ScrollBar的寬度(豎向)或高度(橫向)也是可以控制的,相關的控制屬性是:

android:scrollbarThumbHorizontal
android:scrollbarThumbVertical
android:scrollbarTrackHorizontal
android:scrollbarTrackVertical
android:scrollbarSize      

    ScrollBar分為豎向的和橫向的,也可以強制去掉,控制這一點的屬性是:android:scrollbars

    對于豎向的ScrollBar,我們還可以控制它是顯示在左邊還是右邊,控制這一點的函數是:setVerticalScrollbarPosition

    橫向ScrollBar隻能顯示在下面。

    ScrollBar還有淡出效果,在時間參數和是否允許淡出方面,我們是可以控制的:

android:fadeScrollbars
android:scrollbarDefaultDelayBeforeFade
android:scrollbarFadeDuration      

    在ScrollBar淡出之後,ScrollBar一般是完全看不見的,但是我們可以選擇Track始終可見:

android:scrollbarAlwaysDrawHorizontalTrack
android:scrollbarAlwaysDrawVerticalTrack      

    android:isScrollContainer是一個令人迷惑的屬性,設定它或者不設定它,有時并不能帶來明顯的差別。如果設定為true且它的子View包含EditText,并且連接配接到輸入法(此時軟鍵盤會彈出 ),那麼軟鍵盤會盡最大可能擠壓該View,那樣的話,該View的整個内容都會出現在軟鍵盤之上,而不是部分内容被遮住。但是即使不設定該屬性,有時仍然能達到上述效果,這是因為 Android在擠壓View的時候,也會考慮其它因素,設定該屬性可以在這方面得到一個保證。下面的問答很好的解釋了這個屬性的意義和原理:

http://stackoverflow.com/questions/5308247/what-does-androidisscrollcontainer-do

    android:scrollbarStyle控制着ScrollBar的顯示位置和樣式,可取的值如下:

insideOverlay
insideInset
outsideOverlay
outsideInset      

    inside表示顯示在padding區域的内側,outside表示顯示在padding區域的外側。

    Inset表示将自動增加padding以顯示ScrollBar(這意味着内容區域将縮小),Overlay表示不會增加padding以顯示ScrollBar,而是浮動在内容上面(可能會遮住内容)。

    以下是幾個自定義方法,View提供了預設實作,具體類還需自己實作,如果有必要的話:

computeHorizontalScrollExtent
computeHorizontalScrollOffset
computeHorizontalScrollRange
computeVerticalScrollExtent
computeVerticalScrollOffset
computeVerticalScrollRange
computeScroll      

    以下方法可以在實作的時候調用:

canScrollHorizontally
canScrollVertically

awakenScrollBars









  
   
            

附 layout.xml的一些屬性值

第一類:屬性值 true或者 false android:layout_centerHrizontal 水準居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相對于父元素完全居中 android:layout_alignParentBottom 貼緊父元素的下邊緣 android:layout_alignParentLeft 貼緊父元素的左邊緣 android:layout_alignParentRight 貼緊父元素的右邊緣 android:layout_alignParentTop 貼緊父元素的上邊緣 android:layout_alignWithParentIfMissing 如果對應的兄弟元素找不到的話就以父元素做參照物 android:layout_alignParentStart緊貼父元素結束位置開始 android:layout_alignParentEnd緊貼父元素結束位置結束 android:animateLayoutChanges布局改變時是否有動畫效果 android:clipChildren定義子布局是否一定要在限定的區域内 android:clipToPadding定義布局間是否有間距 android:animationCache定義子布局也有動畫效果 android:alwaysDrawnWithCache定義子布局是否應用繪圖的高速緩存 android:addStatesFromChildren定義布局是否應用子布局的背景 android:splitMotionEvents定義布局是否傳遞touch事件到子布局 android:focusableInTouchMode定義是否可以通過touch擷取到焦點 android:isScrollContainer定義布局是否作為一個滾動容器 可以調整整個窗體 android:fadeScrollbars滾動條自動隐藏 android:fitsSystemWindows設定布局調整時是否考慮系統視窗(如狀态欄) android:visibility定義布局是否可見 android:requiresFadingEdge定義滾動時邊緣是否褪色 android:clickable定義是否可點選 android:longClickable定義是否可長點選 android:saveEnabled設定是否在視窗當機時(如旋轉螢幕)儲存View的資料 android:filterTouchesWhenObscured所在視窗被其它可見視窗遮住時,是否過濾觸摸事件 android:keepScreenOn設定螢幕常亮 android:duplicateParentState是否從父容器中擷取繪圖狀态(光标,按下等) android:soundEffectsEnabled點選或觸摸是否有聲音效果 android:hapticFeedbackEnabled設定觸感回報 第二類:屬性值必須為id的引用名“@id/idname” android:layout_alignBaseline 本元素的文本與父元素文本對齊 android:layout_below 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左邊 android:layout_toRightOf 在某元素的右邊 android:layout_toStartOf本元素從某個元素開始 android:layout_toEndOf本元素在某個元素結束 android:layout_alignTop 本元素的上邊緣和某元素的的上邊緣對齊 android:layout_alignLeft 本元素的左邊緣和某元素的的左邊緣對齊 android:layout_alignBottom 本元素的下邊緣和某元素的的下邊緣對齊 android:layout_alignRight 本元素的右邊緣和某元素的的右邊緣對齊 android:layout_alignStart本元素與開始的父元素對齊 android:layout_alignEnd本元素與結束的父元素對齊 android:ignoreGravity 指定元素不受重力的影響 android:layoutAnimation定義布局顯示時候的動畫 android:id 為布局添加ID友善查找 android:tag為布局添加tag友善查找與類似 android:scrollbarThumbHorizontal設定水準滾動條的drawable。 android:scrollbarThumbVertical設定垂直滾動條的drawable android:scrollbarTrackHorizontal設定水準滾動條背景(軌迹)的色drawable android:scrollbarTrackVertical設定垂直滾動條背景(軌迹)的色drawable android:scrollbarAlwaysDrawHorizontalTrack 設定水準滾動條是否含有軌道 android:scrollbarAlwaysDrawVerticalTrack 設定垂直滾動條是否含有軌道 android:nextFocusLeft 設定左邊指定視圖獲得下一個焦點 android:nextFocusRight設定右邊指定視圖獲得下一個焦點 android:nextFocusUp設定上邊指定視圖獲得下一個焦點 android:nextFocusDown設定下邊指定視圖獲得下一個焦點 android:nextFocusForward設定指定視圖獲得下一個焦點 android:contentDescription 說明 android:OnClick 點選時從上下文中調用指定的方法           第三類:屬性值為具體的像素值,如30dip,40px,50dp android:layout_width定義本元素的寬度 android:layout_height定義本元素的高度 android:layout_margin 本元素離上下左右間的距離 android:layout_marginBottom 離某元素底邊緣的距離 android:layout_marginLeft 離某元素左邊緣的距離 android:layout_marginRight 離某元素右邊緣的距離 android:layout_marginTop 離某元素上邊緣的距離 android:layout_marginStart本元素裡開始的位置的距離 android:layout_marginEnd本元素裡結束位置的距離 android:scrollX水準初始滾動偏移 android:scrollY垂直初始滾動偏移 android:background本元素的背景 android:padding指定布局與子布局的間距 android:paddingLeft指定布局左邊與子布局的間距 android:paddingTop指定布局上邊與子布局的間距 android:paddingRight指定布局右邊與子布局的間距 android:paddingBottom指定布局下邊與子布局的間距 android:paddingStart指定布局左邊與子布局的間距與android:paddingLeft相同 android:paddingEnd指定布局右邊與子布局的間距與android:paddingRight相同 android:fadingEdgeLength 設定邊框漸變的長度 android:minHeight最小高度 android:minWidth最小寬度 android:translationX 水準方向的移動距離 android:translationY垂直方向的移動距離 android:transformPivotX相對于一點的水準方向偏轉量 android:transformPivotY相對于一點的垂直方向偏轉量 第四類:屬性值問Android内置值的 android:gravity控件布局方式 android:layout_gravity布局方式 android:persistentDrawingCachehua定義繪圖的高速緩存的持久性    android:descendantFocusability控制子布局焦點擷取方式 常用于listView的item中包含多個控件 點選無效 android:scrollbars設定滾動條的狀态 android:scrollbarStyle設定滾動條的樣式 android:fitsSystemWindows設定布局調整時是否考慮系統視窗(如狀态欄) android:scrollbarFadeDuration設定滾動條淡入淡出時間 android:scrollbarDefaultDelayBeforeFade設定滾動條N毫秒後開始淡化,以毫秒為機關。 android:scrollbarSize設定滾動調大小 android:fadingEdge 設定拉滾動條時 ,邊框漸變的放向 android:drawingCacheQuality設定繪圖時半透明品質 android:OverScrollMode滑動到邊界時樣式 android:alpha設定透明度 android:rotation旋轉度數 android:rotationX水準旋轉度數 android:rotationY垂直旋轉度數 android:scaleX設定X軸縮放 android:scaleY設定Y軸縮放 android:verticalScrollbarPosition攝者垂直滾動條的位置 android:layerType設定支援 android:layoutDirection定義布局圖紙的方向 android:textDirection定義文字方向 android:textAlignment文字對齊方式 android:importantForAccessibility設定可達性的重要行 android:labelFor添加标簽