精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android View焦點總結(jié)

移動開發(fā) Android
Android焦點相關(guān)邏輯大部分都在都在View, ViewGroup和FocusFinder三個類中。View對象都有一個mParent變量(添加到ViewGroup后), 代指其父容器. 絕大部分View的mParent都是ViewGroup類型, 除了根節(jié)點。一個Window中View根節(jié)點DecorView的mParent稱為ViewRoot, 在安卓4.0后ViewRoot對應ViewRootImpl, 它不是View的子類, 而是個ViewParent。

Android View焦點

Android焦點相關(guān)邏輯大部分都在都在View, ViewGroup和FocusFinder三個類中.

ViewRoot

View對象都有一個mParent變量(添加到ViewGroup后), 代指其父容器. 絕大部分View的mParent都是ViewGroup類型, 除了根節(jié)點. 一個Window中View根節(jié)點DecorView的mParent稱為ViewRoot, 在安卓4.0后ViewRoot對應ViewRootImpl, 它不是View的子類, 而是個ViewParent. ViewRootImpl是連接Window和DecorView的紐帶, View的焦點, 按鍵, 布局, 渲染等流程都是從ViewRoot中開始的.

View的焦點

基本流程如下

 

 

View(包括ViewGroup)獲取焦點都通過如下三個方法

View.java 

 

 

 

從上面可以看到前兩個最終會執(zhí)行到第三個方法.

***的requestFocusNoSearch先判斷是否可以獲取焦點, 然后進入下面的***流程:

View.java 

 

 

 

上面的流程比較簡單: 如果當前沒有焦點, 先置焦點標志, 再通知parent, 然后刷新圖片.

主要的流程在mParent的requestChildFocus里面, 后面會分析. 那里會逐層向上修改焦點View并清除原來有焦點的View的焦點

onFocusChange會觸發(fā)invalidate刷新, 然后調(diào)用onFocusChangeListener. 默認情況每個View只能設(shè)置一個onFocusChangeListener, 而開發(fā)中經(jīng)常遇到需要設(shè)置多個Listener的情況, 我們就可以重寫onFocusChange方法, 實現(xiàn)回調(diào)多個onFocusChangeListener的需求.

ViewGroup的焦點

ViewGroup獲取焦點是在View獲取焦點流程中多了內(nèi)部焦點處理

ViewGroup.java 

 

 

 

上面代碼中descendantFocusability決定了是先按View焦點流程處理(自己處理焦點)還是先把給子View處理

FOCUS_BLOCK_DESCENDANTS 不允許子View獲取焦點, 那么按照View的流程進行

FOCUS_BEFORE_DESCENDANTS 先按照View的流程處理, 如果自己不能獲取焦點則給孩子處理

FOCUS_AFTER_DESCENDANTS 先嘗試給孩子焦點, 如果沒有可獲取焦點再按照View流程自己獲取焦點

默認值FOCUS_BEFORE_DESCENDANTS, 我們可以通過setDescendantFocusability(int d)

設(shè)置

onRequestFocusInDescendants方法是給子類重寫使用, 可以控制子View處理焦點. 默認按照子View順序處理, direction向下或向右則從***個開始, 向上或向左則從***一個開始, 直到某個子View獲取焦點

注意此方法只在此ViewGroup及其上層View上調(diào)用requestFocus時會執(zhí)行到

父容器焦點的處理

在View獲取焦點流程中會調(diào)用mParent.requestChildFocus, 維護View樹上焦點唯一, 在各層ViewGroup中保存有焦點的子View

ViewGroup.java 

 

 

 

先清除自己的焦點, 如果原來內(nèi)部有焦點, 先清除其焦點, 保存獲取焦點的孩子, 然后調(diào)用上一層的requestChildFocus. ***的調(diào)用可知, 這個方法會一直調(diào)用到View的樹的root節(jié)點.

在當前ViewGroup內(nèi)部, 任何一個孩子取得焦點都會執(zhí)行到這個方法, 因此此方法也是ViewGroup得知孩子焦點變化的方法之一.(可惜不能得知孩子失去焦點)

失去焦點或清除焦點

獲取焦點可以是主動的, 但失去焦點一般都是被動的(見上面的代碼), 因此邏輯相對簡單, 只要清除焦點狀態(tài)即可.

ViewGroup.java 

 

 

 

View.java

 

 

注意上面的方法是默認package訪問級別的, 我們無法重寫也不能調(diào)用

也可以主動清除焦點, 與獲取焦點流程相似

ViewGroup.java 

 

 

 

View.java 

 

 

 

ViewGroup.java

以上是安卓View系統(tǒng)焦點處理的全部流程和涉及到的方法, ViewRootImpl的requestChildFocus和clearChildFocus實現(xiàn)我們不需要關(guān)注

另外還有以下一些輔助方法

boolean isFocusable() View是否可以獲取焦點

boolean isFocused() View是否獲取焦點

boolean hasFocus() View/ViewGroup內(nèi)部是否有焦點

View findFocus() 取到View/ViewGroup內(nèi)部的焦點View

View getFocusedChild() 取到ViewGroup內(nèi)部有焦點的子View

View getRootView() 取到根節(jié)點View(一般是DecorView或頂層ViewGroup)

焦點移動

除了在代碼里面控制焦點, 系統(tǒng)對沒有處理的方向鍵等一些按鍵自動按照焦點移動來處理, 見下面代碼

ViewRootImpl.java 

 

 

 

 

 

 

代碼比較上, 但是主要做了三個步驟

如果View沒有處理按鍵, 把上下左右tab等按鍵轉(zhuǎn)換成對應方向

在當前焦點View上通過focusSearch方法查找對應方向的下一個View

查找到的View調(diào)用requestFocus因此主要的流程在focusSearch中

View.java 

 

 

 

普通View查找什么都沒做, 交給parent來完成.

ViewGroup.java 

 

 

 

ViewRootImpl 

 

 

 

 

我們可以重寫focusSearch控制焦點移動順序, 而默認的焦點移動順序由FocusFinder決定

FocusFinder查找焦點

FocusFinder為public的工具類, 主要就兩個方法, 可以在給定的View內(nèi)在指定方向查找指定View或坐標的下一個焦點如下: 

 

 

 

核心邏輯就兩步, 先查找setNextFocusXXId設(shè)置的View, 如果沒有按照就近算法查找.具體算法不再分析, SDK里面有源碼.

總結(jié)

綜合上面的流程分析, 我們在實現(xiàn)自定義View時, 對焦點的特殊需求有如下思路

requestFocus和clearFocus直接對View清除或轉(zhuǎn)移焦點

除了onFocusChangeListener, 還可以在onFocusChange方法中實現(xiàn)一些View失去/獲得焦點時通知

對ViewGroup, 如果只需要在子View獲取焦點時得到通知, 有requestChildFocus方法.

重寫onRequestFocusInDescendants方法可以控制某些情景下ViewGroup焦點

控制焦點移動可以重寫focusSearch方法

另外還有FocusFinder工具和上面的輔助方法.

責任編輯:龐桂玉 來源: Android開發(fā)中文站
相關(guān)推薦

2017-12-28 14:51:01

AndroidView焦點

2016-03-14 09:43:47

androidview總結(jié)

2013-07-16 14:47:18

Android EdiEditText不彈出Android開發(fā)

2011-01-26 10:21:30

view類Qt

2017-03-14 15:09:18

AndroidView圓形進度條

2011-12-23 10:17:25

Android音樂編程管理音頻焦點

2016-12-26 15:25:59

Android自定義View

2016-11-16 21:55:55

源碼分析自定義view androi

2016-04-12 10:07:55

AndroidViewList

2017-03-07 13:03:34

AndroidView知識問答

2014-07-29 15:57:01

ContentProv

2010-01-27 16:41:48

Android特點

2010-01-27 17:45:15

Android應用技巧

2010-01-26 17:05:37

Android缺點

2011-11-04 16:34:20

控件Android

2010-03-05 13:40:29

Android Vie

2016-12-12 14:55:01

AndroidAndroid Vie

2017-08-21 21:36:23

AndroidViewJava

2018-01-09 15:57:18

熱修復開發(fā)編譯

2010-01-27 10:45:32

Android快速啟動
點贊
收藏

51CTO技術(shù)棧公眾號

精品香蕉在线观看视频一| 亚洲一区二区欧美激情| 国产一区二区丝袜| 激情综合网五月天| 国产精品一线天粉嫩av| 欧美日本视频在线| 国产乱子伦精品无码专区| 四虎成人免费在线| 国产一区啦啦啦在线观看| 午夜精品美女自拍福到在线| 免费看日本黄色片| 女同另类激情重口| 欧美日韩国产色站一区二区三区| 777av视频| 麻豆系列在线观看| 久久品道一品道久久精品| 国产精品第8页| 日本五十路女优| 日韩在线欧美| 亚洲色图欧美制服丝袜另类第一页| 中文字幕无码毛片免费看| 成人国产精品一区二区免费麻豆| 亚洲高清在线视频| 色呦呦网站入口| 久久视频www| 成人深夜福利app| 91精品久久久久久久久不口人| 国内精品福利视频| 亚洲激情精品| 久久精品中文字幕电影| 老熟妇一区二区| 欧美黑人巨大videos精品| 91精品国产乱码| wwww.国产| 亚洲一二三四| 欧美日韩裸体免费视频| 波多野结衣 作品| 黄色在线免费看| 中文字幕电影一区| 日本黄网免费一区二区精品| 手机看片国产1024| 国产a久久麻豆| 亚洲www在线| 一级黄色大片免费| 水蜜桃久久夜色精品一区的特点| 97人人爽人人喊人人模波多| 精品无码一区二区三区电影桃花 | 欧美中日韩一区二区三区| 黄色一级大片在线免费看国产| 国产在线播放一区二区三区| 91精品久久久久久| 国产又色又爽又黄又免费| 美国av一区二区| 国产日韩中文字幕| 91片黄在线观看喷潮| 精品一区二区在线看| 成人免费激情视频| 国产欧美久久久| 国产精品综合视频| 岛国视频一区免费观看| 欧美自拍偷拍一区二区| caoporn国产精品| 久久av一区二区三区漫画| 香蕉视频免费在线看| 91一区在线观看| 欧美日韩国产一二| 91社区在线| 亚洲色图丝袜美腿| 成人黄色大片网站| 九九色在线视频| 精品国产户外野外| 免费看国产黄色片| 亚洲伊人精品酒店| 精品久久久久香蕉网| 国产精品福利导航| 欧美日韩一二三四| 久久在线免费观看视频| 国产一级二级三级视频| 国产手机视频一区二区 | 欧洲精品在线播放| 色戒汤唯在线| 欧美日韩高清不卡| 久久久久亚洲av无码网站| 欧美成a人免费观看久久| 国产亚洲精品久久久久久| www.av免费| 日韩网站在线| 国产精品美女网站| 亚洲免费一级片| 国产日韩精品一区二区浪潮av| 特级黄色录像片| 98色花堂精品视频在线观看| 欧美性大战xxxxx久久久| 国产老头和老头xxxx×| 亚洲尤物av| 久久电影一区二区| 国产午夜免费福利| 国产精品自拍三区| 欧美在线3区| 午夜成年人在线免费视频| 日本精品一级二级| www.欧美com| 久久电影院7| 91av视频在线观看| 国产伦一区二区| 国产色婷婷亚洲99精品小说| 成人区一区二区| 欧美激情三区| 国产午夜精品理论片a级探花| 伊人在线视频观看| 天堂在线亚洲视频| 国产精品区一区二区三在线播放| 成人精品一区二区三区校园激情| 亚洲地区一二三色| 小早川怜子一区二区三区| 妖精一区二区三区精品视频| 欧美激情精品久久久久久免费印度 | 狠狠综合久久| 成人国产精品一区二区| 美女做暖暖视频免费在线观看全部网址91| 亚洲女与黑人做爰| 香港日本韩国三级网站| 蜜桃一区二区三区| 孩xxxx性bbbb欧美| 亚洲黄色片视频| 中文字幕在线不卡一区 | 国产亚洲第一页| 精品伊人久久久久7777人| 欧美一区二区高清在线观看| 久热在线观看视频| 精品国产免费一区二区三区四区 | 希岛爱理av一区二区三区| 国产精品成人播放| 撸视在线观看免费视频| 欧美视频一区二区三区…| 国产a级黄色片| 一区福利视频| 岛国视频一区免费观看| 欧美一卡二卡| 精品久久国产老人久久综合| 99精品久久久久| 国产尤物一区二区在线| 中文字幕一区二区三区乱码| 国产精品伊人| 久久精品福利视频| 国产欧美日韩综合精品一区二区三区| 国产精品美女一区二区三区| 老头吃奶性行交视频| 欧美伦理在线视频| 国产精品久久久久91| 国产福利电影在线| 欧美日韩中文国产| 麻豆精品国产免费| 国产一区亚洲一区| 奇米777四色影视在线看| 久久九九精品视频| 欧美精品久久久久久久久| 男人的天堂a在线| 午夜精品成人在线| 中文字幕国产综合| 青草国产精品久久久久久| 亚洲精品在线免费看| 精品美女一区| 欧美另类极品videosbest最新版本 | 毛片无码国产| 中文字幕精品在线| 国产视频一区二区三区四区五区| 亚洲激情欧美激情| 国产视频久久久久久| 日日摸夜夜添夜夜添国产精品 | 伊人福利在线| 日韩成人在线视频网站| 国产精品欧美综合| 18成人在线视频| 国产精品一区二区在线免费观看| 99精品免费视频| 日韩电影免费观看在| 国产精品高清一区二区| 久久全球大尺度高清视频| 欧美女v视频| 5858s免费视频成人| 日本免费一二三区| 国产婷婷精品av在线| 特黄特黄一级片| 免费在线播放第一区高清av| 尤物国产精品| 婷婷精品视频| 成人中文字幕在线观看| 免费在线小视频| 精品国模在线视频| 亚洲男人第一天堂| 欧美色区777第一页| 久久久无码一区二区三区| 久久亚洲二区三区| 亚洲av无一区二区三区久久| 视频一区二区三区在线| 亚洲精品少妇一区二区| 欧美精选视频在线观看| 国产乱码一区| 亚洲人成777| 国产成人精品免费视频| 日本色护士高潮视频在线观看| 亚洲色图17p| 亚洲毛片在线播放| 欧美日韩国产高清一区二区三区| 国产成人精品亚洲男人的天堂 | 五月婷婷激情网| 亚洲欧洲在线观看av| 黄色在线观看av| 国产精品自产自拍| 无尽裸体动漫2d在线观看| 亚洲在线免费| 国产xxxx振车| 亚洲天堂一区二区三区四区| 日本最新一区二区三区视频观看| 国产成人福利av| 成人www视频在线观看| 影视一区二区三区| 91国自产精品中文字幕亚洲| 中文在线观看免费| 在线观看国产欧美| 欧美拍拍视频| 精品一区二区三区四区| 狠狠躁日日躁夜夜躁av| 欧美一级午夜免费电影| ,一级淫片a看免费| 欧美自拍偷拍午夜视频| 久久青青草原亚洲av无码麻豆| 亚洲香肠在线观看| 欧美日韩精品一区二区三区视频播放 | 精品久久久久久一区二区里番| 欧美专区视频| 97人人做人人人难人人做| 国产激情一区| 91沈先生作品| 国产视频一区二区在线播放| 国产视频999| 99tv成人影院| 91色视频在线导航| 亚洲国产欧美国产第一区| 亚洲一区美女视频在线观看免费| 亚洲毛片在线免费| 成人黄色在线播放| 亚洲综合视频| 97av影视网在线观看| 视频二区欧美毛片免费观看| 99蜜桃在线观看免费视频网站| 国产亚洲字幕| av色综合网| 91精品尤物| 国产精华一区二区三区| 老牛精品亚洲成av人片| 美女一区视频| 操欧美老女人| 在线国产99| 欧美片第1页综合| 免费看日本毛片| 小嫩嫩精品导航| 在线黄色免费观看| 国产综合一区二区| 日本wwwxx| 高清不卡一二三区| 一区二区三区少妇| 欧美国产禁国产网站cc| 欧美美女性生活视频| 亚洲精品视频自拍| 久久狠狠高潮亚洲精品| 91久久精品国产91性色tv | 91精品论坛| 国产精品美女主播| 国产高清亚洲| 久久精品人成| 色777狠狠狠综合伊人| 男人天堂新网址| 久久av一区| 色噜噜狠狠一区二区三区狼国成人| 国产精品一区在线| 一二三不卡视频| 国产精品久久久久7777按摩 | 色呦呦国产精品| 一级片免费网站| 精品国产乱码久久久久久蜜臀| 三级黄视频在线观看| 日韩在线观看免费| 99爱在线观看| 国产精品毛片a∨一区二区三区|国| 高清一区二区三区av| 久久国产精品-国产精品| 日韩高清欧美| 北条麻妃69av| 国产在线播精品第三| 蜜桃精品一区二区| 亚洲另类春色国产| 国产一级片av| 欧美精品一区二区三区在线| www日韩tube| 韩国三级电影久久久久久| 桃子视频成人app| 国产精品久久九九| 91影院成人| 国产女女做受ⅹxx高潮| 国产大陆a不卡| 女人十八毛片嫩草av| 亚洲一区免费在线观看| 成人黄色片在线观看 | 69av亚洲| 欧美在线激情网| 99国产精品免费网站| 在线观看欧美一区| 久久视频一区| 美女久久久久久久久| 日韩久久一区二区| 国产裸体美女永久免费无遮挡| 亚洲国产精品成人精品| 国产在线更新| 国产精品香蕉国产| 久草成人在线| 日韩av综合在线观看| 国产经典欧美精品| 91香蕉视频污在线观看| 91成人网在线| 欧美一区二区少妇| 91精品国产免费久久久久久| 一区二区三区四区视频免费观看| 亚洲第一导航| 久久亚洲国产精品一区二区| 亚洲综合自拍网| 亚洲国产精品一区二区www在线| 国产又色又爽又黄又免费| 色悠悠久久88| 99久久综合国产精品二区| 日本黑人久久| 日韩成人av影视| 女女互磨互喷水高潮les呻吟| 欧美日韩在线视频一区| 亚洲欧美激情国产综合久久久| 色综合久综合久久综合久鬼88 | 日本亚洲天堂网| 欧美做受xxxxxⅹ性视频| 欧美视频在线看| 日漫免费在线观看网站| 57pao国产精品一区| 亚洲色图丝袜| 国产精品亚洲二区在线观看| 成人av在线一区二区三区| 国内免费精品视频| 亚洲精品国精品久久99热 | 精品视频一区二区三区免费| 国产综合视频一区二区三区免费| 国产精品扒开腿做爽爽爽男男 | 欧美激情2020午夜免费观看| 91国内精品| 国产精品12345| 91色乱码一区二区三区| 久操视频在线免费观看| 日韩在线国产精品| 国产精品va视频| 日韩国产成人无码av毛片| 91在线观看一区二区| 伊人久久久久久久久久久久 | 精品久久久久一区二区国产| xxx.xxx欧美| 欧美日韩另类综合| 美日韩一区二区| 动漫性做爰视频| 亚洲国产成人一区| 免费观看欧美大片| 亚洲欧美综合一区| 国产传媒欧美日韩成人| 久久久久久久久久免费视频 | 日韩高清在线观看| av最新在线观看| 精品国产sm最大网站免费看| 台湾佬中文娱乐久久久| 国产免费一区二区三区四在线播放| 国产精品99久久久久久似苏梦涵| 一级片免费网址| 伊人青青综合网站| 亚洲一区 二区| 久久久久国产精品熟女影院| 综合分类小说区另类春色亚洲小说欧美| 亚洲av永久无码国产精品久久| 欧美综合第一页| 五月久久久综合一区二区小说| 丝袜熟女一区二区三区| 欧美色男人天堂| 不卡av免费观看| 亚州欧美一区三区三区在线| 成人综合在线观看| 欧美一级黄视频| 久久久免费av| 爽成人777777婷婷| 亚洲一区二区三区四区五区六区| 欧美日韩中文字幕一区二区| 99久久精品免费看国产小宝寻花| 视频一区亚洲| 成人18视频在线播放| 国产人妻精品一区二区三区| 欧洲永久精品大片ww免费漫画| 中文字幕一区二区三区乱码图片|