?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
ViewParent
版本:Android 3.0 r1
?
結(jié)構(gòu)
繼承關(guān)系
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父類,它所具有的功能(譯者注:也可以理解為方法)。當(dāng)一個(gè)View與父類交互時(shí),就可以用到這些API了。(譯者注:Android中子控件維系一個(gè)ViewParent對(duì)象,該對(duì)象象征著整個(gè)控件樹(shù)的管理者,子控件產(chǎn)生影響整個(gè)控件樹(shù)的事件時(shí),會(huì)通知到ViewParent,ViewParent會(huì)將其轉(zhuǎn)換成一個(gè)自頂向下的事件,分發(fā)下去。參照這里)
?
公共方法
public abstract void bringChildToFront (View child)
???????? 把該視圖置于其他所有子視圖之上。(譯者注:如在FrameLayout中切換被疊放的視圖)
參數(shù)
??????????????????????????? child ??????? 需要改變順序的子視圖
??????????????????
public abstract void childDrawableStateChanged (View child)
???????? 當(dāng)子視圖的drawable狀態(tài)發(fā)生變化的時(shí)候,調(diào)用該方法。
參數(shù)
??????????????????????????? child ??????? drawable狀態(tài)發(fā)生變化的子視圖
??????????????????
public abstract void clearChildFocus (View child)
???????? 當(dāng)子視圖失去焦點(diǎn)的時(shí)候調(diào)用該方法。
參數(shù)
??????????????????????????? child ??????? 失去焦點(diǎn)的子視圖
??????????????????
public abstract void createContextMenu (ContextMenu menu)
???????? 如果該指定的ContextMenu需要增加菜單,則會(huì)由它的父類去填充(同時(shí)會(huì)向上遞歸)。
參數(shù)
??????????????????????????? menu ????? 需要填充的菜單
??????????????????
public abstract View focusSearch (View v, int direction)
???????? 在指定的方向找到最近的View來(lái)切換焦點(diǎn)。
參數(shù)
??????????????????????????? v ???? ?????????????????? 當(dāng)前視圖
??????????????????????????? direction ???????? FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, 與FOCUS_RIGHT中取值
?
public abstract void focusableViewAvailable (View v)
???????? 通知父類一個(gè)新的并且能夠取得焦點(diǎn)的子視圖可以使用了。用于處理從沒(méi)有可取得焦點(diǎn)的視圖到出現(xiàn)第一個(gè)可以取得焦點(diǎn)的視圖的轉(zhuǎn)變。
參數(shù)
???????? ?????????????????? v ???? ?????????????????? 新出現(xiàn)的可以取得焦點(diǎn)的視圖
?
public abstract boolean getChildVisibleRect (View child, Rect r, Point offset)
????????
public abstract ViewParent getParent ()
???????? 如果存在父視圖,則返回該視圖;否則返回NULL。
返回
??????????????????????????? 如果不存在父視圖,則返回null
?
public abstract void invalidateChild (View child, Rect r)
???????? 重繪當(dāng)前child指定的范圍。
參數(shù)
??????????????????????????? child ??????? 當(dāng)前視圖
??????????????????????????? r ???? ???????? child中無(wú)效的范圍區(qū)域
?
public abstract ViewParent invalidateChildInParent (int[] location, Rect r)
???????? 重繪當(dāng)前child的全部或者一部分指定范圍。location是長(zhǎng)度為2的整形數(shù)組,兩個(gè)數(shù)分別為child左邊和上邊的坐標(biāo)。如果父視圖中指定的區(qū)域r是無(wú)效的,則返回該ViewParent的父視圖。如果父視圖中指定區(qū)域是有效的或者父視圖不存在,則返回null。如果方法返回對(duì)象不為空,則需要把location數(shù)組中的數(shù)值更新為返回的ViewParent的左邊和上邊的坐標(biāo)值。
參數(shù)
location 長(zhǎng)度為2的整形數(shù)組,數(shù)據(jù)為需要失效的child左邊和上邊的坐標(biāo)值
??????????????????????????? r ???? ???????? child中無(wú)效的范圍區(qū)域
返回
??????????????????????????? ViewParent,如果不存在父視圖,則返回null
?
public abstract boolean isLayoutRequested ()
???????? 返回該視圖父類是否有layout控件被請(qǐng)求。
返回
??????????????????????????? true需要,false 不需要
?
public abstract void recomputeViewAttributes (View child)
???????? 通知父類和子類所有的View屬性需要重新生成。
參數(shù)
??????????????????????????? child ??????? 改變屬性的View
?
public abstract void requestChildFocus (View child , View focused)
???????? 當(dāng)需要轉(zhuǎn)換子類焦點(diǎn)時(shí)調(diào)用。
參數(shù)
child ??????? 該ViewParent需要取得焦點(diǎn)的視圖。該視圖包含當(dāng)前聚焦視圖。但事實(shí)上也不一定會(huì)獲得焦點(diǎn)
focused ? child的一個(gè)有焦點(diǎn)的子視圖
?
public abstract boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
???????? 當(dāng)該child視圖需要顯示在屏幕特定位置時(shí)調(diào)用。ViewGroup如果需要重寫(xiě)該方法,可以遵循以下幾點(diǎn):
l? child必須是該group的直接子類
l? rectangle要是child中的坐標(biāo)
ViewGroup要重寫(xiě)該方法,要堅(jiān)持幾下幾點(diǎn):
l? 如果rectangle規(guī)定的區(qū)域已經(jīng)是可見(jiàn)的,那么該方法將什么都不會(huì)改變
l? 只有在rectangle區(qū)域可見(jiàn)時(shí),該視圖才會(huì)有滾動(dòng)條
參數(shù)
child ???????????????? 以起請(qǐng)求的直接子視圖
rectangle????????? 需要顯示到屏幕上的區(qū)域范圍
??????????????????????????? immediate??????? true禁止有滾動(dòng) false 則有
返回值
??????????????????????????? 處理請(qǐng)求操作后是否有滾動(dòng)
?
public abstract void requestDisallowInterceptTouchEvent (boolean disallowIntercept)
???????? 讓父類不用onInterceptTouchEvent(MotionEvent)
來(lái)攔截觸屏事件。
???????? 該父類需要把該方法傳遞給它的父類。同時(shí)也要服從觸屏的請(qǐng)求(也就是說(shuō),只有在按上Up或者clear后才能清除該標(biāo)識(shí))。
參數(shù)
disallowIntercept??? true表示child不讓父類攔截觸屏事件
?
public abstract void requestLayout ()
???????? 當(dāng)父視圖的一個(gè)child的Layout控件失效時(shí)調(diào)用。該方法將會(huì)重新請(qǐng)求一個(gè)Layout控件。
?
public abstract void requestTransparentRegion (View child)
???????? 當(dāng)一個(gè)child希望視圖層去收集透明區(qū)域并報(bào)告給窗口排序服務(wù)時(shí)調(diào)用。例如SurfaceView可以用這個(gè)接口來(lái)提高接口性能。如果在當(dāng)前層次沒(méi)有視圖,沒(méi)有必要用該方法優(yōu)化,否則有可能會(huì)輕微影響該層的性能。
參數(shù)
child????????? 要求透明區(qū)域進(jìn)行處理的視圖
?
public abstract boolean showContextMenuForChild (View originalView)
???????? 顯示該視圖或者其祖先類的上下文菜單。
???????? 大多數(shù)情況下,子類不需要重寫(xiě)該方法。但是,當(dāng)該子類被直接加到窗口管理器上時(shí)(例如:addView(View,
android.view.ViewGroup.LayoutParams)
),就會(huì)重寫(xiě)該方法,并顯示上下文菜單。
參數(shù)
originalView??? 需要顯示上下文菜單的視圖
返回
??????????????????????????? 顯示上下文菜單時(shí)返回true
?
???????? public abstract ActionMode startActionModeForChild (View originalView, ActionMode.Callback callback) ??? Since: API Level 11
為指定視圖啟動(dòng)一個(gè)操作模式。
大多數(shù)情況下,一個(gè)子類并不需要重新此類。但是,如果子類是直接添加到窗口管理器(例如,addView(View,
android.view.ViewGroup.LayoutParams)
),那么應(yīng)重寫(xiě)此方法并啟動(dòng)操作模式。(譯者注:關(guān)于ActionMode參見(jiàn)這里)
參數(shù)
originalView ? 操作模式首頁(yè)調(diào)用的源視圖
callback ???????? 處理操作模式生命周期的回調(diào)函數(shù)
返回值
如果新的操作模式已經(jīng)啟動(dòng),返回該操作模式,否則返回null。
?
補(bǔ)充
???????? 文章精選
?????????????????? [推薦] 深入Android 【六】 —— 界面構(gòu)造
?????????????????? Android UI Event Listener
?