1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6808],{15680:(A,e,t)=>{t.r(e),t.d(e,{MDXContext:()=>s,MDXProvider:()=>u,mdx:()=>w,useMDXComponents:()=>f,withMDXComponents:()=>c});var n=t(96540);function a(A,e,t){return e in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}function i(){return i=Object.assign||function(A){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(A[n]=t[n])}return A},i.apply(this,arguments)}function r(A,e){var t=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),t.push.apply(t,n)}return t}function o(A){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?r(Object(t),!0).forEach((function(e){a(A,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(e){Object.defineProperty(A,e,Object.getOwnPropertyDescriptor(t,e))}))}return A}function l(A,e){if(null==A)return{};var t,n,a=function(A,e){if(null==A)return{};var t,n,a={},i=Object.keys(A);for(n=0;n<i.length;n++)t=i[n],e.indexOf(t)>=0||(a[t]=A[t]);return a}(A,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(A);for(n=0;n<i.length;n++)t=i[n],e.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(A,t)&&(a[t]=A[t])}return a}var s=n.createContext({}),c=function(A){return function(e){var t=f(e.components);return n.createElement(A,i({},e,{components:t}))}},f=function(A){var e=n.useContext(s),t=e;return A&&(t="function"==typeof A?A(e):o(o({},e),A)),t},u=function(A){var e=f(A.components);return n.createElement(s.Provider,{value:e},A.children)},d="mdxType",p={inlineCode:"code",wrapper:function(A){var e=A.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(A,e){var t=A.components,a=A.mdxType,i=A.originalType,r=A.parentName,s=l(A,["components","mdxType","originalType","parentName"]),c=f(t),u=a,d=c["".concat(r,".").concat(u)]||c[u]||p[u]||i;return t?n.createElement(d,o(o({ref:e},s),{},{components:t})):n.createElement(d,o({ref:e},s))}));function w(A,e){var t=arguments,a=e&&e.mdxType;if("string"==typeof A||a){var i=t.length,r=new Array(i);r[0]=m;var o={};for(var l in e)hasOwnProperty.call(e,l)&&(o[l]=e[l]);o.originalType=A,o[d]="string"==typeof A?A:a,r[1]=o;for(var s=2;s<i;s++)r[s]=t[s];return n.createElement.apply(null,r)}return n.createElement.apply(null,t)}m.displayName="MDXCreateElement"},10730:(A,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>f});var n=t(58168),a=t(98587),i=(t(96540),t(15680)),r=["components"],o={id:"view-flattening",title:"View Flattening"},l=void 0,s={unversionedId:"view-flattening",id:"view-flattening",title:"View Flattening",description:"Let's take a look at the layout in the example below. It contains an image, a title and subtitle. With the traditional Android View system, you would have a view for all these elements, wrapped in a few view groups for arranging the items.",source:"@site/../docs/view-flattening.md",sourceDirName:".",slug:"/view-flattening",permalink:"/docs/view-flattening",draft:!1,editUrl:"https://github.com/facebook/litho/edit/master/website/../docs/view-flattening.md",tags:[],version:"current",frontMatter:{id:"view-flattening",title:"View Flattening"}},c={},f=[],u={toc:f},d="wrapper";function p(A){var e=A.components,o=(0,a.A)(A,r);return(0,i.mdx)(d,(0,n.A)({},u,o,{components:e,mdxType:"MDXLayout"}),(0,i.mdx)("p",null,"Let's take a look at the layout in the example below. It contains an image, a title and subtitle. With the traditional Android View system, you would have a view for all these elements, wrapped in a few view groups for arranging the items."),(0,i.mdx)("p",null,(0,i.mdx)("img",{alt:"View Flattening",src:t(44194).A,width:"736",height:"181"})),(0,i.mdx)("p",null,"Litho automatically reduces the number of views your final UI hierarchy will contain. The layout tree that results from the layout calculation step is just a blueprint of your UI with no direct coupling with Android views. This allows the framework to process the layout tree for optimal rendering performance before the component is mounted.\nWe do this in two ways."),(0,i.mdx)("p",null,"First, Litho can completely skip containers after layout calculation because they are not used in the mount step. For our example, there won't be a view group wrapping title and subtitle when it is mounted."),(0,i.mdx)("p",null,"Second, Litho can mount either a view or a drawable. In fact, most of the core widgets in the framework, such as Text and Image, mount drawables, not views."),(0,i.mdx)("p",null,"As a result of these optimizations, the component for the UI in the example would actually be rendered as a single, completely flat, view. You can see this in the following screenshot."),(0,i.mdx)("p",null,(0,i.mdx)("img",{alt:"View Flattening",src:t(3003).A,width:"736",height:"181"})),(0,i.mdx)("p",null,'While flatter views have important benefits for memory usage and drawing times, they are not a silver bullet for everything. Litho has a very general system to automatically "unflatten" the view hierarchy of mounted components when we want to lean on non-trivial features from Android views such as touch event handling, accessibility, or confining invalidations. For instance, if you wanted to enable clicking on the image or text in the example, the framework would automatically wrap them in a view if they have ',(0,i.mdx)("a",{parentName:"p",href:"/docs/codegen/events-for-specs#callbacks"},"click handlers"),"."))}p.isMDXComponent=!0},3003:(A,e,t)=>{t.d(e,{A:()=>n});const n="data:image/png;base64,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"},44194:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/viewflatteningnobounds-7e3635e1a2334735f8020884a9f5f14c.jpeg"}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.