android.widget.HorizontalScrollViewhtml
用於佈局的容器,能夠放置讓用戶使用滾動條查看的視圖層次結構,容許視圖結構比手機的屏幕大。HorizontalScrollView是一種FrameLayout
(框架佈局),其子項被滾動查看時是總體移動的,而且子項自己能夠是一個有複雜層次結構的佈局管理器。一個常見的應用是子項在水平方向中,用戶能夠滾動顯示頂層水平排列的子項(items)。android
HorizontalScrollView不能夠和ListView同時用,由於ListView有本身的滾動條設置。最重要的是,若是在須要顯示很大的list的狀況下,二者同時用則會使ListView在一些重要的優化上失效。出現這種失效的緣由在於,HorizontalScrollView會強迫ListView用HorizontalScrollView自己提供的空間容器(infinite container)來顯示完整的列表。web
相似的狀況,TextView
也有本身的滾動條,因此不須要ScrollView。但這二者是能夠同時使用的,使用的結果會是在一個更大的容器裏顯示文本視圖。canvas
HorizontalScrollView只支持水平方向的滾動顯示。app
公共方法框架
public void addView (View child)函數
添加一個子視圖。若這個子視圖沒有被設置佈局參數,則使用ViewGroup的缺省參數。佈局
參數優化
child 要添加的子視圖動畫
public void addView (View child, int index)
添加一個子視圖。若這個子視圖沒有被設置佈局參數,則使用ViewGroup的缺省參數。
參數
child 要添加的子視圖
index 子視圖要加入的位置
public void addView (View child, int index, ViewGroup.LayoutParams params)
添加一個帶有指定佈局參數的子視圖。
參數
child 要添加的子視圖
index 子視圖要加入的位置
params 子視圖的佈局參數
public void addView (View child, ViewGroup.LayoutParams params)
添加一個帶有指定佈局參數的子視圖。
參數
child 要添加的子視圖
params 子視圖的佈局參數
public boolean arrowScroll (int direction)
響應點擊左右箭頭時對滾動條的處理。
參數
direction The direction corresponding to the arrow key that was pressed箭頭按鍵所表示的方向
返回值
若此事件成功完成,則返回true;不然返回false。
public void computeScroll ()
被父視圖調用,用於必要時候對其子視圖的值(mScrollX和mScrollY)進行更新。典型的狀況如:父視圖中某個子視圖使用一個Scroller
對象來實現滾動操做,會使得此方法被調用。
public boolean dispatchKeyEvent (KeyEvent event)
按照能夠得到焦點的順序(從視圖樹的頂端到當前得到焦點的視圖),分派一個按鍵事件給下一個視圖。若此視圖爲焦點視圖,事件將會分派給它本身。不然它將按照順序,分派給下一個節點。此方法同時觸動全部按鍵監聽器。
參數
event 被分派的事件.
返回值
若事件被處理,則返回true;不然爲false
public void draw (Canvas canvas)
手動繪製視圖(及其子視圖)到指定的畫布(Canvas)。這個視圖必須在調用這個函數以前作好了總體佈局。。當實現一個視圖時,不須要繼承這個方法;相反,你應該實現onDraw(Canvas)
方法。
參數
canvas 繪製視圖的畫布
public boolean executeKeyEvent (KeyEvent event)
須要經過按鍵事件來實現滾動操做時,能夠調用此方法。效果相似於由視圖樹型結構分派事件。
參數
event 須要執行的事件
返回值
若事件被處理,則返回true;不然爲false
public void fling (int velocityX)
滾動視圖的fling手勢。
參數
velocityX 方向的初始速率。正值表示手指/光標向屏幕右邊滑動,而內容相對向左滾動。
public boolean fullScroll (int direction)
處理按下"home/end"快捷鍵以後的滾動響應。此方法會將視圖移左或移右,同時將焦點賦予移動後可視的最左或最右的組件。若是沒有任何組件適合獲得焦點,此scrollview將收回焦點。
參數
direction 滾動方向:FOCUS_LEFT表示向視圖的左邊移動,FOCUS_RIGHT表示向視圖的右邊移動
返回值
若此方法消耗(consumed)了按鍵事件則返回true,不然返回false。
public int getMaxScrollAmount ()
返回值
按左右箭頭時視圖能夠滾動的最大值。
public boolean isFillViewport ()
表示此ScrollView的內容是否被拉伸以適應視口(viewport)的大小。
返回值
若內容填充了視口則返回true,不然返回false。
public boolean isSmoothScrollingEnabled ()
返回值
按箭頭方向滾動時,是否顯示滾動的平滑效果。
public boolean onInterceptTouchEvent (MotionEvent ev)
使用此方法能夠攔截全部觸摸屏動做引起的事件。這意味着你能夠監視分派給子項的事件,而且能夠拿到任何當前手勢的全部權。
使用此方法需謹慎。由於它與View.onTouchEvent(MotionEvent)有至關複雜的交互影響。這二者都必須同時正確地實現。事件將按如下順序來被方法接收:
1. 接收到down事件
2. 事件將被視圖組的一個子視圖處理,或者被傳遞給本身的onTouchEvent()方法處理;這意味着你必須實現onTouchEvent(),而且返回true,這樣才能夠接着接受到其餘的手勢(而不是尋求一個父視圖來處理它)。onTouchEvent()返回true後,你將再也不接受到onInterceptTouchEvent()的任何事件,同時全部對觸摸動做的處理必須像往常同樣在onTouchEvent()中進行。
3. 若是返回false,則接下來的每一個事件(全部的up事件,包含最後一個up)將會首先被傳遞到這裏,而後到目標對象view的onTouchEvent()。
4. 若是返回ture,你將不會接收到如下任何事件:目標view將會接收到相同的事件,可是帶着ACTION_CANCEL的動做。全部在此以後的事件將會被傳遞到你的onTouchEvent()方法中,而且再也不在這裏出現。
參數
ev 沿着樹型結構往下分派的動做事件
返回值
若將動做事件從子視圖中截獲並經過onTouchEvent()將他們分派給當前ViewGroup,則返回true。當前目標將收到一個ACTION_CANCEL事件,而且再也不會有其餘消息被傳遞到這裏。
public boolean onTouchEvent (MotionEvent ev)
此方法用於處理觸摸屏的動做事件。
參數
ev 動做事件
返回值
若事件被成功處理,則返回true;不然返回false
public boolean pageScroll (int direction)
處理按下"page up/down"快捷鍵以後的滾動響應。此方法會將視圖往左或往右滾動一個頁面的距離,同時將焦點賦予移動後可視的最左或最右的組件。若是沒有任何組件適合獲得焦點,此scrollview將收回焦點。
參數
direction 滾動方向:FOCUS_LEFT表示向視圖的左邊移動一個頁面FOCUS_RIGHT表示向視圖的右邊移動一個頁面
返回值
若此方法處理(consumed)了按鍵事件則返回true,不然返回false。
public void requestChildFocus (View child, View focused)
當父視圖的一個子視圖要得到焦點時,調用此方法。
參數
child 要得到焦點的子視圖。此視圖將包含焦點視圖,但其自己沒必要爲焦點。
focused 事實上擁有焦點的子視圖的下層視圖。
public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
當組裏的某個子視圖須要被定位在屏幕的某個矩形範圍時,調用此方法。重載此方法的ViewGroup可確認如下幾點:
* 子項目將是組裏的直系子項
* 矩形將在子項目的座標體系中
重載此方法的ViewGroup應該支持如下幾點:
* 若矩形已是可見的,則沒有東西會改變
* 爲使矩形區域所有可見,視圖將能夠被滾動顯示
參數
child 發出請求的子視圖
rectangle 子項目座標系內的矩形,即此子項目但願在屏幕上的定位
immediate 設爲true,則禁止動畫和平滑移動滾動條
返回值
進行了滾動操做的這個組(group),是否處理此操做
public void requestLayout ()
當出現使視圖佈局失效的改變時,調用此方法。它將規劃一個視圖樹的佈局路徑。
public void scrollTo (int x, int y)
設置視圖滾動後的位置。這將引發onScrollChanged(int,int,int,int)的調用,同時使此視圖失效。
此版本同時將滾動鎖定於子視圖的範圍。
參數
x 要滾動到的x位置
y 要滾動到的y位置
public void setFillViewport (boolean fillViewport)
設置此滾動視圖是否將內容寬度拉伸來適應視口(viewport)。
參數
fillViewport 設置爲true表示將拉伸內容寬度;不然會設置爲false。
public void setOverScrollMode (int mode)
爲視圖設置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS
(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS
(只容許當視圖內容大過容器時,進行over-scrolling)和OVER_SCROLL_NEVER
。只有當視圖能夠滾動時,此項設置才起做用。
參數
mode 視圖的新over-scroll模式值
public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)
設置是否呈現按下箭頭後的平滑滾動效果(動畫效果)。
參數
smoothScrollingEnabled 設置是否呈現平滑滾動效果
public final void smoothScrollBy (int dx, int dy)
相似scrollBy(int, int)
,可是呈現平滑滾動,而非瞬間滾動(譯者注:瞬間滾動——指不顯示滾動過程,直接顯示滾動後達到的位置)。
參數
dx 要滾動的X軸像素差值(譯者注:橫向像素差值)
dy 要滾動的Y軸像素差值(譯者注:縱向像素差值)
public final void smoothScrollTo (int x, int y)
相似scrollTo(int, int)
,可是呈現平滑滾動,而不是瞬間滾動。
參數
x 滾動要到達位置的X軸值
y 滾動要到達位置的Y軸值
受保護方法
protected int computeHorizontalScrollOffset ()
計算水平方向滾動條的滑塊的偏移值。此值用來計算滾動時滑塊的位置。
偏移值的範圍能夠以任何單位表示,但必須與computeHorizontalScrollRange()和computeHorizontalScrollExtent()的單位一致。
缺省的偏移值爲視圖滾動的偏移差值。
返回值
滾動條滑塊在水平方向上的偏移值
protected int computeHorizontalScrollRange ()
scroll view 的可滾動水平範圍是全部子視圖的寬度總合。
返回值
水平滾動條表示的所有水平滾動範圍
protected int computeScrollDeltaToGetChildRectOnScreen (Rect rect)
計算X方向滾動的總合,以便在屏幕上顯示子視圖的完整矩形(或者,若矩形寬度超過屏幕寬度,至少要填滿第一個屏幕大小)。
參數
rect 矩形
返回值
滾動差值
protected float getLeftFadingEdgeStrength ()
返回左漸變邊緣的強度或密集度。強度的值介於0.0(無漸變)到1.0(全漸變)之間。缺省實現只返回0.0或1.0,而不返回中間值。子類必須重載次方法來給滾動動做提供更平滑的漸變過程。
返回值
左漸變的強度,即介於0.0f和1.0f之間的浮點值
protected float getRightFadingEdgeStrength ()
返回右漸變邊緣的強度或密集度。強度的值介於0.0(無漸變)到1.0(全漸變)之間。缺省實現只返回0.0或1.0,而不返回中間值。子類必須重載此方法來給滾動動做提供更平滑的漸變過程。
返回值
右漸變的強度,即介於0.0f和1.0f之間的浮點值
protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)
要求子視圖測量自身,須要將視圖的MeasureSpec和其附加內容同時考慮在內。getChildMeasureSpec在其中承擔了重要角色,它計算出MeasureSpec,並傳遞給子視圖。
參數
child 要測量的子視圖
parentWidthMeasureSpec 此視圖的寬度要求
parentHeightMeasureSpec 此視圖的高度要求
protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)
要求子視圖測量自身,須要將視圖的MeasureSpec、附加內容和邊緣部分同時考慮在內。子項必須有MarginLayoutParams(邊緣佈局參數)。getChildMeasureSpec在其中承擔了重要角色,它計算出MeasureSpec,並傳遞給子視圖。
參數
child 要測量的子視圖
parentWidthMeasureSpec 此視圖的寬度要求
widthUsed 被父視圖(也多是其餘子視圖)佔用的橫向額外空間
parentHeightMeasureSpec 此視圖的高度要求
heightUsed 被父視圖(也多是其餘子視圖)佔用的縱向額外空間
protected void onLayout (boolean changed, int l, int t, int r, int b)
當此視圖要給每一個子視圖賦值大小和位置時,layout會調用此方法。子項的派生類應當重載此方法,而且調用各個子項的layout。
參數
changed 此視圖有新的大小或位置
l 左邊界位置,相對於父視圖
t 上邊界位置,相對於父視圖
r 右邊界位置,相對於父視圖
b 下邊界位置,相對於父視圖
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
調用此方法來肯定自己和所包含內容的大小(寬度和高度)。此方法被measure(int,int)喚起,並且必須被子類重載以獲得所包含內容的確切大小。
注意:當重載此方法時,必須調用setMeasureDimension(int,int)來保存View的大小。若是沒有作到,將會引起一個measure(int,int)拋出的IllegalStateException(非法狀態錯誤)。超類onMeasure(int,int)能夠被調用。
編寫基類的確認大小的方法,缺省狀況下是根據其背景大小來確認,除非MeasureSepc容許有更大的高度或寬度。子類必須重載onMeasure(int,int)以獲得對其內容大小的更準確的測量。
若此方法被重載,它的子類須要確保其高度和寬度至少達到View所規定的最小值(可經過getSuggestedMinimumHeight()和getSuggestedMinimumWidth()獲得)。
參數
widthMeasureSpec 受上一層大小影響下的對水平空間的要求。可參看View.MeasureSpec。
heightMeasureSpec 受上一層大小影響下的對垂直空間的要求。可參看View.MeasureSpec。
protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)
被overScrollBy(int, int, int, int, int, int, int, int, boolean)
調用,來對一個over-scroll操做的結果進行響應。
參數
scrollX 新的X滾動像素值
scrollY 新的Y滾動像素值
clampedX 當scrollX被over-scroll的邊界限制時,值爲true
clampedY 當scrollY被over-scroll的邊界限制時,值爲true
protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
當在某個scroll view的子視圖中尋找焦點時,須要當心不能讓屏幕以外的組件獲得焦點。這比缺省ViewGroup的實現代價更高,不然此行爲被設爲缺省。
參數
direction 值能夠爲FOCUS_UP,FOCUS_DOWN,FOCUS_LEFT或 FOCUS_RIGHT
previouslyFocusedRect 可以給出一個較好的提示的矩形(當前視圖的座標系統)表示焦點從哪裏得來。若是沒有提示則爲null。
返回值
是否取到了焦點。
protected void onSizeChanged (int w, int h, int oldw, int oldh)
當View的大小改變時此方法被調用。若是View是剛剛被加入,則視以前的值爲0。
參數
w View的當前寬度
h View的當前高度
oldw View大小改變以前的寬度
oldh View大小改變以前的高度
補充
文章精選