就我的理解而言,FlatViewManager會將其所有子級和自身平放爲一個名爲FlatViewGroup的視圖。但後來我發現RCTTextManager返回RCTText作爲它的影子節點,而RCTText不是虛擬節點。所以RCTTextManager將作爲viewInstance返回FlatViewGroup?並且在FlatViewGroup中會有視圖層次結構嗎?我不知道平板是什麼意思。FlatViewManager在反應原生android中的用途是什麼?
回答
你的理解是正確的,但是有一些你錯過了。
FlatViewGroup本身不會執行或繪製任何內容。您可以注意到,每個View實際上都是一個FlatViewGroup(文本,圖像,視圖 - 所有內容都映射到FlatViewGroup)。
但是,泛型FlatViewGroup如何繪製圖像,文本,邊框等等?事情是,它不知道任何。
它的工作方式是View,Image和Text在後臺線程中準備內容,對其進行優化並嘗試儘可能少地使用資源(Android Views)。在許多情況下,它可以將數百個元素放入一個FlatViewGroup中。
但在某些情況下,更多視圖更好。例如,它有一個元素,你變異很多,最好如果該元素被移出到它自己的視圖,以便當該元素更改時,我們只能重繪該元素。
每個FlatShadowNode中都有一個標誌,它們控制我們是否可以將元素平鋪到父項中。
因此,當FlatShadowNode確實將mMountsToView標誌設置爲true時,我們應該使用哪個View?那麼,這是ViewManager.createViewInstance()踢入的地方。
現在我可以回答你的問題。是的,RCTViewManager將爲RCTText返回FlatViewGroup,但不會爲每 RCTText返回。大多數文本將將mMountsToView設置爲false,從而變爲父項。
你困惑的事情是虛擬節點vs安裝到視圖。
虛擬節點是Flexbox的事情,它表示節點不是獨立的節點,並且不能被測量。這有一個副作用,它總是與父非虛擬節點合併。這與Flat實現無關。
平面UI管理器將節點展平到一個全新的水平。它增加了這個mMountsToView標誌,控制節點是否會進一步變平。如果節點發生大量變異並導致其兄弟無緣無故重繪,則將其設置爲true。
爲了幫助你更多地理解,想象你想優化RCTText。您注意到它有時會掛載到FlatViewGroup,但由於它不能包含任何子級,因此它不一定是ViewGroup。你可以添加一個FlatView(或者甚至更專門的東西,比如FlatTextView),將FlatViewGroup的內容複製到它中,刪除所有的子級管理邏輯,修改RCTTextManager以返回你的View並且它將工作。如果你重新運行你的React,你會注意到一些文本現在正在使用你的新視圖,但只有那些將mMountsToView標誌設置爲true的文本(你可以通過例如將文本不透明度設置爲0.99來觸發它)。其餘部分將被拼合成可能仍在使用FlatViewGroup的父級。
希望有所幫助。
- 1. VirtualViewManager和FlatViewManager在反應原生android之間有什麼區別
- 2. 原子讀取的用途是什麼
- 3. 崩潰的反應,原生Android應用
- 4. Android中SharedPreferences的用途是什麼?
- 5. EnableEventValidation的用途是什麼?它的工作原理是什麼?
- 6. 反應原生PickerIOS爲Android
- 7. TabNavigator - 反應原生Android
- 8. 反應原生圖爲android
- 9. 上反應原生Android
- 10. 什麼是exports.displayName =(undefined:?string);意味着在反應原生?
- 11. array.prototype.slice.call中的原型有什麼用途
- 12. Android應用程序,不是原生的,使用什麼
- 13. 在反應組件中使用static contextTypes = {}的原因是什麼?
- 14. 原生Android應用程序的定義是什麼?
- 15. Android持久性的用途是什麼?
- 16. AccountManager(android)的用途是什麼?
- 17. Android NDK的實際用途是什麼?
- 18. Android上ASLR的用途是什麼?
- 19. 使用還原反應的原因是什麼?
- 20. 反應原生android信用卡掃描
- 21. numberOfLines將無法在Android反應原生
- 22. 在Android 4.0.3上反應原生。可能?
- 23. 在Android上反應原生flexbox問題
- 24. 反應原生:watchID:?number = null這是什麼語法?
- 25. 在原生反應中安排任務的最佳方式是什麼?
- 26. 在pygame中VIDEOEXPOSE的用途是什麼?
- 27. 在Jasmine中beforeAll()的用途是什麼?
- 28. MaxL在Hyperion中的用途是什麼?
- 29. DECREQTPARM在VT100中的用途是什麼?
- 30. IBoutlet在ios中的用途是什麼?
謝謝你的耐心和優秀的解釋。我仍然有問題: *如果在開始時將mMountsToView標誌設置爲false的RCTText,相應的FlatViewGroup是否也會創建,並且除了FlatViewGroup(RCTText)從其父項開始,或者它不會在Android View樹中存在,直到該標誌設置爲true。 *假設'ReactSliderShadowNode'在RCTView中,RCTView的mMountsToView將被設置爲true或false。以及如何在flatshadow節點中繪製一個非flatshadow節點。 – York
否,如果mMountsToView爲false,則不會創建FlatViewGroup。 – user2662514
每當您添加需要Android視圖的節點(例如ReactSliderShadowNode)時,它都將使用NativeViewWrapper進行包裝。 ReactSliderShadowNode沒有mMountsToView標誌,所以我們需要用一個包含它的節點來包裝它。 NativeViewWrapper將mMountsToView設置爲true,並且其ViewManager將視圖創建委託給底層包裝節點。 – user2662514