/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . ui . samples Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Sample d Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . gest ures . Orientation Ċ import Ġandroidx . compose . foundation . gest ures . remember Scroll able State Ċ import Ġandroidx . compose . foundation . gest ures . scroll able Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . Top AppBar Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Experimental Compose Ui Api Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . input . nested scroll . Nested Scroll Connection Ċ import Ġandroidx . compose . ui . input . nested scroll . Nested Scroll Source Ċ import Ġandroidx . compose . ui . input . nested scroll . nested Scroll Ċ import Ġandroidx . compose . ui . platform . Compose View Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . platform . remember Nested Scroll Interop Connection Ċ import Ġandroidx . compose . ui . unit . Int Offset Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . view interop . Android View Ċ import Ġandroidx . core . view . View Compat Ċ import Ġkotlin . math . round ToInt Ċ Ċ @ Opt In ( Experimental Compose Ui Api :: class ) Ċ @ Sample d Ċ @ Composable Ċ fun ĠCompose In C ooper ating View Nested Scroll Interop Sample () Ġ{ ĊĠĠĠ Ġval Ġnested S roll Interop Ġ= Ġremember Nested Scroll Interop Connection () ĊĠĠĠ Ġ// ĠAdd Ġthe Ġnested Ġscroll Ġconnection Ġto Ġyour Ġtop Ġlevel Ġ@ Composable Ġelement ĊĠĠĠ Ġ// Ġusing Ġthe Ġnested Scroll Ġmodifier . ĊĠĠĠ ĠLazy Column ( modifier Ġ= ĠModifier . nested Scroll ( nested S roll Interop )) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems ( 2 0 ) Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . Gray ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( item . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Sample d Ċ @ Composable Ċ fun ĠView In Compose Nested Scroll Interop Sample () Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll able ( remember Scroll able State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġview Ġworld Ġdelt as Ġshould Ġbe Ġreflected Ġin Ġcompose Ġworld ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcomponents Ġthat Ġparticip ate Ġin Ġnested Ġscrolling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠOrientation . Vertical ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( android . R . layout . activity _ list _ item , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNested ĠScroll ĠInter op Ġwill Ġbe ĠEnabled Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnested Ġscroll Ġis Ġenabled Ġfor Ġthe Ġroot Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Nested Scrolling Enabled ( this , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠToolbar Height Ġ= Ġ 4 8 . dp Ċ Ċ @ Composable Ċ fun ĠCol lap sing Toolbar Compose View Compose Nested Scroll Interop Sample () Ġ{ ĊĠĠĠ Ġval Ġtoolbar Height Px Ġ= Ġwith ( Local Density . current ) Ġ{ ĠToolbar Height . round To Px (). toFloat () Ġ} ĊĠĠĠ Ġval Ġtoolbar Offset Height Px Ġ= Ġremember Ġ{ Ġmutable State Of ( 0 f ) Ġ} ĊĊĠĠĠ Ġval Ġnested Scroll Connection Ġ= Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠNested Scroll Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Scroll ( available : ĠOffset , Ġsource : ĠNested Scroll Source ): ĠOffset Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġavailable . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Offset Ġ= Ġtoolbar Offset Height Px . value Ġ+ Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Offset Height Px . value Ġ= Ġnew Offset . coerce In (- toolbar Height Px , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOffset . Zero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCompose ĠScroll able ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. nested Scroll ( nested Scroll Connection ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( Toolbar Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset Ġ{ ĠInt Offset ( x Ġ= Ġ 0 , Ġy Ġ= Ġtoolbar Offset Height Px . value . round ToInt ()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĠText (" toolbar Ġoffset Ġis Ġ${ toolbar Offset Height Px . value }") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠAndroid ĠView ĊĠĠĠĠĠĠĠ ĠAndroid View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory Ġ= Ġ{ Ġcontext Ġ-> ĠAndroid View With Compose ( context ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠAndroid View With Compose ( context : ĠContext ): ĠView Ġ{ ĊĠĠĠ Ġreturn ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . three _ fold _ nested _ scroll _ interop , Ġnull ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( findViewById < Compose View >( R . id . compose _ view )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCompose ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Ġ{ ĠLazy Column With Nested Scroll Interop Enabled () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Nested Scrolling Enabled ( it , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Compose Ui Api :: class ) Ċ @ Composable Ċ private Ġfun ĠLazy Column With Nested Scroll Interop Enabled () Ġ{ ĊĠĠĠ ĠLazy Column ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremember Nested Scroll Interop Connection () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( top Ġ= ĠToolbar Height ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" This Ġis Ġa ĠLazy ĠColumn ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġitems ( 4 0 ) Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . Gray ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( item . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ