初步認識view組件焦點切換原理

來源:互聯網
上載者:User

     這段時間因為自己要實現一套組件焦點切換機制,今天認真研究了一下Android的view組件是如何切換焦點的。Android'view組件的切換的介面是focusSearch(View focused, int direction), 它是通過FocusFinder這個類來實現的,也就是把整個view切換邏輯都搬到了這個類裡,這是個好主要,不至於讓view過分臃腫(雖然已經很龐大了...)。FocusFinder會首先會通過view的getFocusables(int direction)方法把所有focusable的view收集起來,貌似這個direction沒有什麼作用,然後通過offsetDescendantRectToMyCoords(View descendant, Rect rect)把這些view組件的座標轉化為同一座標繫上,接著就是判斷當前focused組件上下左右4個方向下一組件是誰了。

     Android'view組件很多方法都是交給它的parent來實現,而parent由交給上一級parent, 直到最後的ViewRoot, 比如requestChildFocus(),  clearChildFocus() , requestLayout(), invalidate()方法等,ViewRoot才是對它們真正的實現,也就是方法調用由下而上,而產生的變化由上而下,很有層次感。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.