編輯:Android開發實例
前言
本章內容是android.view.ViewParent,版本為Android 3.0 r1,翻譯來自"逝憶流緣"。
正文
一、結構
public interface ViewParent
android.view.ViewParent
間接子類
AbsListView, AbsSpinner, AbsoluteLayout, AdapterView<T extends Adapter>, AppWidgetHostView, DatePicker, DialerFilter, ExpandableListView, FrameLayout, Gallery, GestureOverlayView, GridView, HorizontalScrollView, ImageSwitcher, LinearLayout, ListView, MediaController, RadioGroup, RelativeLayout, ScrollView, SlidingDrawer, Spinner, TabHost, TabWidget, TableLayout, TableRow, TextSwitcher, TimePicker, TwoLineListItem, ViewAnimator, ViewFlipper, ViewGroup, ViewSwitcher, WebView, ZoomControls
二、類概述
定義了一些作為View父類,它所具有的功能(譯者注:也可以理解為方法)。當一個View與父類交互時,就可以用到這些API了。(譯者注:Android中子控件維系一個ViewParent對象,該對象象征著整個控件樹的管理者,子控件產生影響整個控件樹的事件時,會通知到ViewParent,ViewParent會將其轉換成一個自頂向下的事件,分發下去。參照這裡)
三、公共方法
public abstract void bringChildToFront (View child)
把該視圖置於其他所有子視圖之上。(譯者注:如在FrameLayout中切換被疊放的視圖)
參數
child 需要改變順序的子視圖
public abstract void childDrawableStateChanged (View child)
當子視圖的drawable狀態發生變化的時候,調用該方法。
參數
child drawable狀態發生變化的子視圖
public abstract void clearChildFocus (View child)
當子視圖失去焦點的時候調用該方法。
參數
child 失去焦點的子視圖
public abstract void createContextMenu (ContextMenu menu)
如果該指定的ContextMenu需要增加菜單,則會由它的父類去填充(同時會向上遞歸)。
參數
menu 需要填充的菜單
public abstract View focusSearch (View v, int direction)
在指定的方向找到最近的View來切換焦點。
參數
v 當前視圖
direction FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, 與FOCUS_RIGHT中取值
public abstract void focusableViewAvailable (View v)
通知父類一個新的並且能夠取得焦點的子視圖可以使用了。用於處理從沒有可取得焦點的視圖到出現第一個可以取得焦點的視圖的轉變。
參數
v 新出現的可以取得焦點的視圖
public abstract boolean getChildVisibleRect (View child, Rect r, Point offset)
public abstract ViewParent getParent ()
如果存在父視圖,則返回該視圖;否則返回NULL。
返回
如果不存在父視圖,則返回null
public abstract void invalidateChild (View child, Rect r)
重繪當前child指定的范圍。
參數
child 當前視圖
r child中無效的范圍區域
public abstract ViewParent invalidateChildInParent (int[] location, Rect r)
重繪當前child的全部或者一部分指定范圍。location是長度為2的整形數組,兩個數分別為child左邊和上邊的坐標。如果父視圖中指定的區域r是無效的,則返回該ViewParent的父視圖。如果父視圖中指定區域是有效的或者父視圖不存在,則返回null。如果方法返回對象不為空,則需要把location數組中的數值更新為返回的ViewParent的左邊和上邊的坐標值。
參數
location 長度為2的整形數組,數據為需要失效的child左邊和上邊的坐標值
r child中無效的范圍區域
返回
ViewParent,如果不存在父視圖,則返回null
public abstract boolean isLayoutRequested ()
返回該視圖父類是否有layout控件被請求。
返回
true需要,false 不需要
public abstract void recomputeViewAttributes (View child)
通知父類和子類所有的View屬性需要重新生成。
參數
child 改變屬性的View
public abstract void requestChildFocus (View child , View focused)
當需要轉換子類焦點時調用。
參數
child 該ViewParent需要取得焦點的視圖。該視圖包含當前聚焦視圖。但事實上也不一定會獲得焦點
focused child的一個有焦點的子視圖
public abstract boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
當該child視圖需要顯示在屏幕特定位置時調用。ViewGroup如果需要重寫該方法,可以遵循以下幾點:
* child必須是該group的直接子類
* rectangle要是child中的坐標
ViewGroup要重寫該方法,要堅持幾下幾點:
* 如果rectangle規定的區域已經是可見的,那麼該方法將什麼都不會改變
* 只有在rectangle區域可見時,該視圖才會有滾動條
參數
child 以起請求的直接子視圖
rectangle 需要顯示到屏幕上的區域范圍
immediate true禁止有滾動 false 則有
返回值
處理請求操作後是否有滾動
public abstract void requestDisallowInterceptTouchEvent (boolean disallowIntercept)
讓父類不用onInterceptTouchEvent(MotionEvent)來攔截觸屏事件。
該父類需要把該方法傳遞給它的父類。同時也要服從觸屏的請求(也就是說,只有在按上Up或者clear後才能清除該標識)。
參數
disallowIntercept true表示child不讓父類攔截觸屏事件
public abstract void requestLayout ()
當父視圖的一個child的Layout控件失效時調用。該方法將會重新請求一個Layout控件。
public abstract void requestTransparentRegion (View child)
當一個child希望視圖層去收集透明區域並報告給窗口排序服務時調用。例如SurfaceView可以用這個接口來提高接口性能。如果在當前層次沒有視圖,沒有必要用該方法優化,否則有可能會輕微影響該層的性能。
參數
child 要求透明區域進行處理的視圖
public abstract boolean showContextMenuForChild (View originalView)
顯示該視圖或者其祖先類的上下文菜單。
大多數情況下,子類不需要重寫該方法。但是,當該子類被直接加到窗口管理器上時(例如:addView(View, android.view.ViewGroup.LayoutParams)
),就會重寫該方法,並顯示上下文菜單。
參數
originalView 需要顯示上下文菜單的視圖
返回
顯示上下文菜單時返回true
public abstract ActionMode startActionModeForChild (View originalView, ActionMode.Callback callback) Since: API Level 11
為指定視圖啟動一個操作模式。
大多數情況下,一個子類並不需要重新此類。但是,如果子類是直接添加到窗口管理器(例如,addView(View, android.view.ViewGroup.LayoutParams)
),那麼應重寫此方法並啟動操作模式。(譯者注:關於ActionMode參見這裡)
參數
originalView 操作模式首頁調用的源視圖
callback 處理操作模式生命周期的回調函數
返回值
如果新的操作模式已經啟動,返回該操作模式,否則返回null。
四、補充
文章精選
[推薦]深入Android 【六】 —— 界面構造
Android UI Event Listener
點九圖片的拉伸區域不難理解,顯示內容區域是怎樣的?.9 ,是andriod平台的應用軟件開發裡的一種特殊的圖片形式,文件擴展名為:.9.png智能手機中有自動橫屏
微信平台開放後倒是挺火的,許多第三方應用都想試下接入微信這個平台,畢竟可以利用微信建立起來的關系鏈來拓展自己的應用還是挺不錯的,可以節約很多在社交方面的開銷,我最
EditText和TextView一樣,也可以進行圖文混排。所不同的是,TextView只用於顯示圖文混排效果,而EditText不僅可顯示,也可混合輸入文字和圖
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我