{"id":25796,"date":"2026-04-23T08:16:45","date_gmt":"2026-04-22T23:16:45","guid":{"rendered":"https:\/\/aireviewirush.com\/?p=25796"},"modified":"2026-04-23T08:16:45","modified_gmt":"2026-04-22T23:16:45","slug":"whats-new-within-the-jetpack-compose-april-26-launch","status":"publish","type":"post","link":"https:\/\/aireviewirush.com\/?p=25796","title":{"rendered":"What&#8217;s new within the Jetpack Compose April &#8217;26 launch"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<i>Posted by Meghan Mehta,\u00a0Android Developer Relations Engineer<\/i><\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhZHE0FDmx0vqGgZ6V5OvwB9prJFgTdYZbOOkQ1h8bS_5BuTn3TyomD5gYJdqvcJP2rE5Ju4147sThpKYIiCKXQ3DTw2gQtVjWRM23gzPdpDo5jyblVPbjNRqiVVC9bWW92xNYtARsoCDWuyxAiYRyxtgeAQRqI_t6bTR2PFrdQZCHMgXgU82TBolFXXkw\/s8583\/0420%20Compose%201.11%20_%20Blog%20(1).png\" style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" border=\"0\" data-original-height=\"2601\" data-original-width=\"8583\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhZHE0FDmx0vqGgZ6V5OvwB9prJFgTdYZbOOkQ1h8bS_5BuTn3TyomD5gYJdqvcJP2rE5Ju4147sThpKYIiCKXQ3DTw2gQtVjWRM23gzPdpDo5jyblVPbjNRqiVVC9bWW92xNYtARsoCDWuyxAiYRyxtgeAQRqI_t6bTR2PFrdQZCHMgXgU82TBolFXXkw\/s16000\/0420%20Compose%201.11%20_%20Blog%20(1).png\" alt=\"\"><\/a><\/div>\n<p>Right now, the Jetpack Compose April \u201826 launch is steady. This launch comprises model 1.11 of core Compose modules (see the <a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/compose-bom#bom-mapping\" target=\"_blank\" rel=\"noopener\">full BOM mapping<\/a>), shared ingredient debug instruments, trackpad occasions, and extra. We even have a couple of experimental APIs that we\u2019d love you to check out and provides us suggestions on.\n<\/p>\n<p>  To make use of at present\u2019s launch, improve your <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/bom\" target=\"_blank\" rel=\"noopener\">Compose BOM<\/a> model to:<\/p>\n<pre><code>implementation(platform(\"androidx.compose:compose-bom:2026.04.01\"))<\/code><\/pre>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_53 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\" role=\"button\"><label for=\"item-69e98d2b65b71\" ><span class=\"\"><span style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input aria-label=\"Toggle\" aria-label=\"item-69e98d2b65b71\"  type=\"checkbox\" id=\"item-69e98d2b65b71\"><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Adjustments_in_Compose_1110\" title=\"Adjustments in Compose 1.11.0\">Adjustments in Compose 1.11.0<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Coroutine_execution_in_assessments\" title=\"Coroutine execution in assessments\">Coroutine execution in assessments<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Shared_ingredient_enhancements_and_animation_tooling\" title=\"Shared ingredient enhancements and animation tooling\">Shared ingredient enhancements and animation tooling<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Trackpad_occasions\" title=\"Trackpad occasions\">Trackpad occasions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Composition_host_defaults_Compose_runtime\" title=\"Composition host defaults (Compose runtime)\">Composition host defaults (Compose runtime)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Preview_wrappers\" title=\"Preview wrappers\">Preview wrappers<\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Deprecations_and_removals\" title=\"Deprecations and removals\">Deprecations and removals<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Upcoming_APIs\" title=\"Upcoming APIs\">Upcoming APIs<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Kinds_Experimental\" title=\"Kinds (Experimental)\">Kinds (Experimental)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#MediaQuery_Experimental\" title=\"MediaQuery (Experimental)\">MediaQuery (Experimental)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Grid_Experimental\" title=\"Grid (Experimental)\">Grid (Experimental)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#FlexBox_Experimental\" title=\"FlexBox (Experimental)\">FlexBox (Experimental)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#New_SlotTable_implementation_Experimental\" title=\"New SlotTable implementation (Experimental)\">New SlotTable implementation (Experimental)<\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/aireviewirush.com\/?p=25796\/#Begin_coding_at_present\" title=\"Begin coding at present!\">Begin coding at present!<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Adjustments_in_Compose_1110\"><\/span>Adjustments in Compose 1.11.0<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h2><span class=\"ez-toc-section\" id=\"Coroutine_execution_in_assessments\"><\/span>Coroutine execution in assessments<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  We\u2019re introducing a significant replace to how Compose handles check timing. Following the opt-in interval introduced in Compose 1.10, the v2 testing APIs are actually the default, and the v1 APIs have been deprecated. The important thing change is a shift within the default check dispatcher. Whereas the v1 APIs relied on <code><a href=\"https:\/\/developer.android.com\/kotlin\/coroutines\/test#unconfinedtestdispatcher\" target=\"_blank\" rel=\"noopener\">UnconfinedTestDispatcher<\/a><\/code>, which executed coroutines instantly, the v2 APIs use the <code><a href=\"https:\/\/developer.android.com\/kotlin\/coroutines\/test#standardtestdispatcher\" target=\"_blank\" rel=\"noopener\">StandardTestDispatcher<\/a><\/code>. Which means that when a coroutine is launched in your assessments, it&#8217;s now queued and doesn&#8217;t execute till the digital clock is superior.\n<\/p>\n<p>\n  This higher mimics manufacturing circumstances, successfully flushing out race circumstances and making your check suite considerably extra strong and fewer flaky.\n<\/p>\n<p>\n  To make sure your assessments align with customary coroutine habits and to keep away from future compatibility points, we strongly suggest migrating your check suite. Take a look at our complete\u00a0\u00a0<a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/testing\/migrations\/testing-v2\" target=\"_blank\" rel=\"noopener\">migration information<\/a> for API mappings and customary fixes.\n<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Shared_ingredient_enhancements_and_animation_tooling\"><\/span>Shared ingredient enhancements and animation tooling<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi4CPWGQS1YJIuKDoVHrHVoXkXd1CeRWXew-VTXok2Mvh_Dh1k37F8j9GzSw204ICu2xwVs9CtlYlJyAD-iifjyYL07U0vax-5Y1TUw1oX2_BmEmh0prbjuBzznkJE8hcnkqbpjaBk7_jeolgsMyXNF2gKtzLRJBrxQ-B8yiUXCG3Ekmon0CBAERiVqSjE\/s836\/sharedElement.gif\" style=\"margin-left: 1em; margin-right: 1em;\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"836\" data-original-width=\"376\" height=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi4CPWGQS1YJIuKDoVHrHVoXkXd1CeRWXew-VTXok2Mvh_Dh1k37F8j9GzSw204ICu2xwVs9CtlYlJyAD-iifjyYL07U0vax-5Y1TUw1oX2_BmEmh0prbjuBzznkJE8hcnkqbpjaBk7_jeolgsMyXNF2gKtzLRJBrxQ-B8yiUXCG3Ekmon0CBAERiVqSjE\/w180-h400\/sharedElement.gif\" width=\"180\" alt=\"\"><\/a><\/div>\n<p>\n  We\u2019ve additionally added some helpful visible debugging instruments for shared components and <code>Modifier.animatedBounds<\/code>. Now you can see precisely what\u2019s taking place underneath the hood\u2014like goal bounds, animation trajectories, and what number of matches are discovered\u2014making it a lot simpler to identify why a transition won&#8217;t be behaving as anticipated. To make use of the brand new tooling, merely encompass your <code>SharedTransitionLayout<\/code> with the <code><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/animation\/package-summary#LookaheadAnimationVisualDebugging(kotlin.Boolean,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Boolean,kotlin.Function0)\" target=\"_blank\" rel=\"noopener\">LookaheadAnimationVisualDebugging<\/a><\/code> composable.\n<\/p>\n<pre><code>LookaheadAnimationVisualDebugging(\n    overlayColor = Colour(0x4AE91E63),\n    isEnabled = true,\n    multipleMatchesColor = Colour.Inexperienced,\n    isShowKeylabelEnabled = false,\n    unmatchedElementColor = Colour.Crimson,\n) {\n    SharedTransitionLayout {\n        CompositionLocalProvider(\n            LocalSharedTransitionScope offers this,\n        ) {\n            \/\/ your content material\n        }\n    }\n}<br\/><\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Trackpad_occasions\"><\/span>Trackpad occasions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  We\u2019ve revamped Compose assist for trackpads, like built-in laptop computer trackpads, attachable trackpads for tablets, or exterior\/digital trackpads. Primary trackpad occasions will now typically be thought of <code>PointerType.Mouse<\/code> occasions, aligning mouse and trackpad habits to raised match consumer expectations. Beforehand, these trackpad occasions had been interpreted as faux touchscreen fingers of <code>PointerType.Contact<\/code>, which led to complicated consumer experiences. For instance, clicking and dragging with a trackpad would scroll as a substitute of choosing. By altering the pointer kind these occasions have within the newest launch of Compose, clicking and dragging with a trackpad will not scroll.\n<\/p>\n<p>\n  We additionally added assist for extra sophisticated trackpad gestures as acknowledged by the platform since API 34, together with <a href=\"https:\/\/developer.android.com\/reference\/android\/view\/MotionEvent#CLASSIFICATION_TWO_FINGER_SWIPE\" target=\"_blank\" rel=\"noopener\">two finger swipes<\/a> and <a href=\"https:\/\/developer.android.com\/reference\/android\/view\/MotionEvent#CLASSIFICATION_PINCH\" target=\"_blank\" rel=\"noopener\">pinches<\/a>. These gestures are routinely acknowledged by parts like <code>Modifier.scrollable<\/code> and <code>Modifier.transformable<\/code> to have higher habits with trackpads.\n<\/p>\n<p>\n  These adjustments enhance habits for trackpads throughout built-in parts, with redundant contact slop eliminated, a extra intuitive drag-and-drop beginning gesture, double-click and triple-click choice in textual content fields, and desktop-styled context menus in textual content fields.\n<\/p>\n<p>\n  To check trackpad habits, there are new testing APIs with <code><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/ui\/test\/SemanticsNodeInteraction?hl=en#(androidx.compose.ui.test.SemanticsNodeInteraction).performTrackpadInput(kotlin.Function1)\" target=\"_blank\" rel=\"noopener\">performTrackpadInput<\/a><\/code>, which permit validating the habits of your apps when getting used with a trackpad. In case you have customized gesture detectors, validate habits throughout enter sorts, together with touchscreens, mice, trackpads, and styluses, and guarantee assist for mouse scroll wheels and trackpad gestures.\n<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<thead>\n<tr>\n<th style=\"text-align: center;\">Earlier than<\/th>\n<th style=\"text-align: center;\">After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: center; width: 50%;\">\n<div class=\"separator\" style=\"clear: both;\">\n          <a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhPrtrimI6TGSfomNIoLe6bnkyrwEBYtIc1mehBgJZxnxGl3kxvlPpOZFMyyfbSThY7ECio5BNtswy2gsmXmi1EMdsqbGK9zDnUyK49PUv_Z1LKHyD6vWLIHxQSo75zEQ8m4tsPTyToitGSN3Ciuj2lTYfggHO9Z3CQhTk3ZjkrGLd9gn8JXkMzzwOeKIs\/s1600\/before%202.gif\" style=\"display: block; padding: 1em 0px; text-align: center;\" target=\"_blank\" rel=\"noopener\"><br \/>\n            <img decoding=\"async\" alt=\"Before\" border=\"0\" data-original-height=\"360\" data-original-width=\"640\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhPrtrimI6TGSfomNIoLe6bnkyrwEBYtIc1mehBgJZxnxGl3kxvlPpOZFMyyfbSThY7ECio5BNtswy2gsmXmi1EMdsqbGK9zDnUyK49PUv_Z1LKHyD6vWLIHxQSo75zEQ8m4tsPTyToitGSN3Ciuj2lTYfggHO9Z3CQhTk3ZjkrGLd9gn8JXkMzzwOeKIs\/s16000\/before%202.gif\" style=\"height: auto; width: 100%;\"\/><br \/>\n          <\/a>\n        <\/div>\n<\/td>\n<td style=\"text-align: center; width: 50%;\">\n<div class=\"separator\" style=\"clear: both;\">\n          <a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi24EUtKJ-bdapy5LjBehqxDwV1LS9giT6u4K279a5UVO-XkKAuEAbNpCQqbHHaIqn7JOC0fJZ3xNgAds2c0dBTqhbVKcafFhXh4QuMZNMpfqvDsH8s4IJJ4iNzXRGhnGwctzGczKCgf39X308h5WcP3g3dLrQUHlLrIsRgB_9RgAzUwXk8ZvXzUh46qto\/s1600\/after%203.gif\" style=\"display: block; padding: 1em 0px; text-align: center;\" target=\"_blank\" rel=\"noopener\"><br \/>\n            <img decoding=\"async\" alt=\"After\" border=\"0\" data-original-height=\"360\" data-original-width=\"640\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi24EUtKJ-bdapy5LjBehqxDwV1LS9giT6u4K279a5UVO-XkKAuEAbNpCQqbHHaIqn7JOC0fJZ3xNgAds2c0dBTqhbVKcafFhXh4QuMZNMpfqvDsH8s4IJJ4iNzXRGhnGwctzGczKCgf39X308h5WcP3g3dLrQUHlLrIsRgB_9RgAzUwXk8ZvXzUh46qto\/s16000\/after%203.gif\" style=\"height: auto; width: 100%;\"\/><br \/>\n          <\/a>\n        <\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span class=\"ez-toc-section\" id=\"Composition_host_defaults_Compose_runtime\"><\/span>Composition host defaults (Compose runtime)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  We launched <code><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/runtime\/HostDefaultProvider\" target=\"_blank\" rel=\"noopener\">HostDefaultProvider<\/a><\/code>, <code>LocalHostDefaultProvider<\/code>, <code>HostDefaultKey<\/code>, and <code>ViewTreeHostDefaultKey<\/code> to produce host-level providers instantly via compose-runtime. This removes the necessity for libraries to rely on compose-ui for lookups, higher supporting Kotlin Multiplatform. To hyperlink these values to the composition tree, library authors can use <code>compositionLocalWithHostDefaultOf<\/code> to create a <code>CompositionLocal<\/code> that resolves defaults from the host.\n<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Preview_wrappers\"><\/span>Preview wrappers<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  Android Studio customized previews is a brand new function that means that you can outline precisely how the contents of a Compose preview are displayed.\n<\/p>\n<p>\n  By implementing the <code>PreviewWrapperProvider<\/code> interface and making use of the brand new <code>@PreviewWrapper<\/code> annotation, you possibly can simply inject customized logic, comparable to making use of a particular Theme. The annotation may be utilized to a perform annotated with <code>@Composable<\/code> and <code>@Preview<\/code> or <code>@MultiPreview<\/code>, providing a generic, easy-to-use answer that works throughout preview options and considerably reduces repetitive code.\n<\/p>\n<pre><span id=\"docs-internal-guid-abe8e28a-7fff-d18a-2ace-96633e0a3887\"><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">class ThemeWrapper: <\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">PreviewWrapper<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\"> {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0@Composable<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0override enjoyable Wrap(content material: <\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">@Composable<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\"> (() -&gt; Unit)) {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0JetsnackTheme {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0content material()<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">}<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">@PreviewWrapperProvider<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">(ThemeWrapper::class)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">@Preview<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">@Composable<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">non-public enjoyable ButtonPreview() {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\/\/ JetsnackTheme in impact<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0Button(onClick = {}) {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Textual content(textual content = \"Demo\")<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.8; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">}<\/span><\/p><\/span><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Deprecations_and_removals\"><\/span>Deprecations and removals<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul style=\"text-align: left;\">\n<li>As introduced within the <a href=\"https:\/\/android-developers.googleblog.com\/2025\/12\/whats-new-in-jetpack-compose-december.html\" target=\"_blank\" rel=\"noopener\">Compose 1.10 weblog publish<\/a>, we\u2019re deprecating <code>Modifier.onFirstVisible()<\/code>. Its title usually led to misconceptions, significantly inside lazy layouts, the place it might set off a number of instances throughout scrolling. We suggest migrating to <code><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/ui\/layout\/package-summary#(androidx.compose.ui.Modifier).onVisibilityChanged(kotlin.Long,kotlin.Float,androidx.compose.ui.layout.LayoutBoundsHolder,kotlin.Function1)\" target=\"_blank\" rel=\"noopener\">Modifier.onVisibilityChanged()<\/a><\/code>, which permits for extra exact handbook monitoring of visibility states tailor-made to your particular use case necessities.\n<\/li>\n<li>The <code>ComposeFoundationFlags.isTextFieldDpadNavigationEnabled<\/code> flag was eliminated as a result of D-pad navigation for <code>TextFields<\/code> is now all the time enabled by default. The brand new habits ensures that the D-pad occasions from a gamepad or a TV distant first transfer the cursor within the given course. The main target can transfer to a different ingredient solely when the cursor reaches the tip of the textual content.\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Upcoming_APIs\"><\/span>Upcoming APIs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\n  Within the upcoming Compose 1.12.0 launch, the <code>compileSdk<\/code> will probably be upgraded to <code>compileSdk 37<\/code>, with AGP 9 and all apps and libraries that rely on Compose inheriting this requirement. We suggest maintaining updated with the newest launched variations, as Compose goals to promptly undertake new <code>compileSdks<\/code> to offer entry to the newest Android options. Make sure you take a look at the\u00a0<a href=\"https:\/\/developer.android.com\/build\/releases\/gradle-plugin#api-level-support\" target=\"_blank\" rel=\"noopener\">documentation right here<\/a> for extra data on which model of AGP is supported for various API ranges.\n<\/p>\n<p>\n  In Compose 1.11.0, the next APIs are launched as <code>@Experimental<\/code>, and we stay up for listening to your suggestions as you discover them in your apps. Be aware that <code>@Experimental<\/code> APIs are offered for early analysis and suggestions and will endure vital adjustments or removing in future releases.\n<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Kinds_Experimental\"><\/span>Kinds (Experimental)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  We&#8217;re introducing a brand new experimental basis API for <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/styles\" target=\"_blank\" rel=\"noopener\">styling<\/a>. The Type API is a brand new paradigm for customizing visible components of parts, which has historically been carried out with modifiers. It&#8217;s designed to unlock deeper, simpler customization by exposing a normal set of styleable properties with easy state-based styling and animated transitions.\u00a0With this new API, we\u2019re already seeing promising <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/styles\/performance\" target=\"_blank\" rel=\"noopener\">efficiency advantages<\/a>. We plan to undertake Kinds in Materials parts as soon as the Type API stabilizes.<\/p>\n<p>\n  A fundamental instance of overriding a pressed state model background:\n<\/p>\n<pre><code>@Composable\nenjoyable LoginButton(modifier: Modifier = Modifier) {\n    Button(\n        onClick = {\n            \/\/ Login logic\n        },\n        modifier = modifier,\n        model = {\n            background(\n                Brush.linearGradient(\n                    listOf(lightPurple, lightBlue)\n                )\n            )\n            width(75.dp)\n            peak(50.dp)\n            textAlign(TextAlign.Middle)\n            externalPadding(16.dp)\n\n            pressed {\n                background(\n                    Brush.linearGradient(\n                        listOf(Colour.Magenta, Colour.Crimson)\n                    )\n                )\n            }\n        }\n    ){\n        Textual content(\n            textual content = \"Login\",\n        )\n    }\n}<\/code><\/pre>\n<p><\/p>\n<div><\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhzKgxY8FG0-Yf5HGCa-4OJeBgqmau8GIIODou5Wc4RFgIbI1nPHnO_wOp24UMUdyLoENyIe6iAby97tQLDRQhKVk5RYUVwBt-d5cuC1dcKYjJUVpYqBCKFugjCT4R-d2Hp_oohdUn1YLtJra-VXwQoU4UNgb5YenVsJ2O8H67NtLeZfMMpLLdp1VPJUhE\/s900\/styles.gif\" style=\"margin-left: 1em; margin-right: 1em;\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"626\" data-original-width=\"900\" height=\"278\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhzKgxY8FG0-Yf5HGCa-4OJeBgqmau8GIIODou5Wc4RFgIbI1nPHnO_wOp24UMUdyLoENyIe6iAby97tQLDRQhKVk5RYUVwBt-d5cuC1dcKYjJUVpYqBCKFugjCT4R-d2Hp_oohdUn1YLtJra-VXwQoU4UNgb5YenVsJ2O8H67NtLeZfMMpLLdp1VPJUhE\/w400-h278\/styles.gif\" width=\"400\" alt=\"\"><\/a><\/div>\n<h2><span class=\"ez-toc-section\" id=\"MediaQuery_Experimental\"><\/span>MediaQuery (Experimental)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  The brand new <code><a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/adaptive\/mediaquery\" target=\"_blank\" rel=\"noopener\">mediaQuery<\/a><\/code> API offers a declarative and performant option to adapt your UI to its surroundings. It abstracts advanced data retrieval into easy circumstances inside a <code><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/ui\/UiMediaScope\" target=\"_blank\" rel=\"noopener\">UiMediaScope<\/a><\/code>, making certain recomposition solely occurs when wanted.\n<\/p>\n<p>\n  With assist for a variety of environmental indicators\u2014from system capabilities like keyboard sorts and pointer precision, to contextual states like window measurement and posture\u2014you possibly can construct deeply responsive experiences. Efficiency is baked in with <code><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/ui\/package-summary#derivedMediaQuery(kotlin.Function1)\" target=\"_blank\" rel=\"noopener\">derivedMediaQuery<\/a><\/code> to deal with high-frequency updates, whereas the flexibility to override scopes makes testing and previews seamless throughout {hardware} configurations.\n<\/p>\n<p>\n  Beforehand, to get entry to sure system properties \u2014 like if a tool was in <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/adaptive\/foldables\/make-your-app-fold-aware#features_of_foldable_displays\" target=\"_blank\" rel=\"noopener\">tabletop mode<\/a> \u2014 you\u2019d want to jot down a number of boilerplate to take action:\n<\/p>\n<pre><code>@Composable\nenjoyable isTabletopPosture(\n    context: Context = LocalContext.present\n): Boolean {\n    val windowLayoutInfo by\n        WindowInfoTracker\n            .getOrCreate(context)\n            .windowLayoutInfo(context)\n            .collectAsStateWithLifecycle(null)\n\n    return windowLayoutInfo.displayFeatures.any { displayFeature -&gt;\n        displayFeature is FoldingFeature &amp;&amp;\n            displayFeature.state == FoldingFeature.State.HALF_OPENED &amp;&amp;\n            displayFeature.orientation == FoldingFeature.Orientation.HORIZONTAL\n    }\n}\n\n@Composable\nenjoyable VideoPlayer() {\n    if(isTabletopPosture()) {\n        TabletopLayout()\n    } else {\n        FlatLayout()\n    }\n}<\/code><\/pre>\n<p>\n  Now, with <code>UIMediaQuery<\/code>, you possibly can add the <code>mediaQuery<\/code> syntax to question system properties, comparable to if a tool is in tabletop mode:\n<\/p>\n<pre><code>@OptIn(ExperimentalMediaQueryApi::class)\n@Composable\nenjoyable VideoPlayer() {\n    if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) {\n        TabletopLayout()\n    } else {\n        FlatLayout()\n    }\n}<\/code><\/pre>\n<p>\n  Take a look at the <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/adaptive\/mediaquery\" target=\"_blank\" rel=\"noopener\">documentation<\/a> and file any bugs <a href=\"https:\/\/issuetracker.google.com\/issues?q=componentid:1876021\" target=\"_blank\" rel=\"noopener\">right here<\/a>.\n<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Grid_Experimental\"><\/span>Grid (Experimental)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  <code><a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/adaptive\/grid\" target=\"_blank\" rel=\"noopener\">Grid<\/a><\/code> is a robust new API for constructing advanced, two-dimensional layouts in Jetpack Compose. Whereas <code>Row<\/code> and <code>Column<\/code> are nice for linear designs, <code>Grid<\/code> offers you the structural management wanted for screen-level structure and complicated parts with out the overhead of a scrollable listing.\n<\/p>\n<p>\n  <code>Grid<\/code> means that you can outline your structure utilizing tracks, gaps, and cells, providing acquainted sizing choices like <code>Dp<\/code>, percentages, intrinsic content material sizes, and versatile &#8220;Fr&#8221; models.\n<\/p>\n<pre><span id=\"docs-internal-guid-f771cc35-7fff-11ce-f06a-37fd1c308045\"><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">@OptIn<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">(ExperimentalGridApi::<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">class<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">@Composable<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">enjoyable <\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">GridExample() {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0Grid(<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0config = {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0repeat(<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">4<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">) { column(<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">0<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">.<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">25f<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">) }<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0repeat(<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">2<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">) { row(<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">0<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">.<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">5f<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">) }<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0hole(<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">16<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">.dp)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0) {<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Card1(modifier = Modifier.gridItem(rowSpan = <\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">2<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Card2(modifier = Modifier.gridItem(colmnSpan = <\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">3<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Card3(modifier = Modifier.gridItem(columnSpan = <\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">2<\/span><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Card4()<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.8; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;\">}<\/span><\/p><\/span><\/pre>\n<p>\n  You&#8217;ll be able to place objects routinely or explicitly span them throughout a number of rows and columns for precision. Better of all, it\u2019s extremely adaptive\u2014you possibly can dynamically reconfigure your grid tracks and spans to reply to system states like tabletop mode or orientation adjustments, making certain your UI appears nice throughout kind elements.\n<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgTDUrQltkehSG0RuoiwDzVefCFsJBOn4I4zVYiee1NMYS5UeNdK9j4rP28myI7IwH8Me12xUDF_O5_MOH2dMWnysVD5dc6yx2Ag454bG1ShjuC_0UlX-bv15SJbW0bjSvrMHGbrit9qaNMa8PsDasFzKaoV1gdep3d7tgdaixqd7zvL-CrGbJ_lRIx7KI\/s554\/Grid.gif\" style=\"margin-left: 1em; margin-right: 1em;\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"550\" data-original-width=\"554\" height=\"398\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgTDUrQltkehSG0RuoiwDzVefCFsJBOn4I4zVYiee1NMYS5UeNdK9j4rP28myI7IwH8Me12xUDF_O5_MOH2dMWnysVD5dc6yx2Ag454bG1ShjuC_0UlX-bv15SJbW0bjSvrMHGbrit9qaNMa8PsDasFzKaoV1gdep3d7tgdaixqd7zvL-CrGbJ_lRIx7KI\/w400-h398\/Grid.gif\" width=\"400\" alt=\"\"><\/a><\/div>\n<p>\n  Take a look at the <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/adaptive\/grid\" target=\"_blank\" rel=\"noopener\">documentation<\/a> and\u00a0file any bugs <a href=\"https:\/\/issuetracker.google.com\/issues\/new?component=1876021&amp;template=1424126\" target=\"_blank\" rel=\"noopener\">right here<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"FlexBox_Experimental\"><\/span>FlexBox (Experimental)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/foundation\/layout\/package-summary#FlexBox(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.FlexBoxConfig,kotlin.Function1)\" target=\"_blank\" rel=\"noopener\">FlexBox<\/a> is a structure container designed for prime efficiency, adaptive UIs. It manages merchandise sizing and house distribution primarily based on obtainable container dimensions. It handles advanced duties like wrapping (<code>wrap<\/code>) and multi-axis alignment of things (<code>justifyContent<\/code>, <code>alignItems<\/code>, <code>alignContent<\/code>). It permits objects to develop (<code>develop<\/code>) or shrink (<code>shrink<\/code>) to fill the container.<\/p>\n<pre><code>@OptIn(ExperimentalFlexBoxApi::class)\nenjoyable FlexBoxWrapping(){\n    FlexBox(\n        config = {\n            wrap(FlexWrap.Wrap)\n            hole(8.dp)\n        }\n    ) {\n        RedRoundedBox()\n        BlueRoundedBox()\n        GreenRoundedBox(modifier = Modifier.width(350.dp).flex { develop(1.0f) })\n        OrangeRoundedBox(modifier = Modifier.width(200.dp).flex { develop(0.7f) })\n        PinkRoundedBox(modifier = Modifier.width(200.dp).flex { develop(0.3f) })\n    }\n}<\/code><\/pre>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgmcEvU3D7gpqW-gwblZmbXvzJo-cxVbSJJN0Q5UA4JACUThZ3x1xMUKKRqezPh4LSIWFcj1agYgdmYRwCovI9lCJ48sHZXNyY5bVi8Ow_WNc7718kc5njqAnSjLCDflE1gWcUiZ-lShOlRHDE3jXQygdCVKQqN2yaGIchpbVZaycj2Os-fVgsOzrrU230\/s3092\/AnimationGif.gif\" style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" border=\"0\" data-original-height=\"1080\" data-original-width=\"3092\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgmcEvU3D7gpqW-gwblZmbXvzJo-cxVbSJJN0Q5UA4JACUThZ3x1xMUKKRqezPh4LSIWFcj1agYgdmYRwCovI9lCJ48sHZXNyY5bVi8Ow_WNc7718kc5njqAnSjLCDflE1gWcUiZ-lShOlRHDE3jXQygdCVKQqN2yaGIchpbVZaycj2Os-fVgsOzrrU230\/s16000\/AnimationGif.gif\" alt=\"\"><\/a><\/div>\n<p><\/p>\n<h3><\/h3>\n<h2><\/h2>\n<h2><\/h2>\n<p>Take a look at the\u00a0<a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/adaptive\/flexbox\" target=\"_blank\" rel=\"noopener\">documentation<\/a>\u00a0and file any bugs\u00a0<a href=\"https:\/\/b.corp.google.com\/issues\/new?component=1876021&amp;title=%5BFlexBox%5D&amp;pli=1&amp;template=0\" target=\"_blank\" rel=\"noopener\">right here<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"New_SlotTable_implementation_Experimental\"><\/span>New SlotTable implementation (Experimental)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  We\u2019ve launched a brand new implementation of the <code>SlotTable<\/code>, which is disabled by default on this launch. <code>SlotTable<\/code> is the inner information construction that the Compose runtime makes use of to trace the state of your composition hierarchy, monitor invalidations\/recompositions, retailer remembered values, and monitor all metadata of the composition at runtime. This new implementation is designed to enhance efficiency, primarily round random edits.\n<\/p>\n<p>\n  To attempt the brand new <code>SlotTable<\/code>, allow <code><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/runtime\/ComposeRuntimeFlags?hl=en#isLinkBufferComposerEnabled()\" target=\"_blank\" rel=\"noopener\">ComposeRuntimeFlags.isLinkBufferComposerEnabled<\/a><\/code>.\n<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Begin_coding_at_present\"><\/span>Begin coding at present!<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\n  With so many thrilling new APIs in Jetpack Compose, and lots of extra developing, it is by no means been a greater time to <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/migrate\/migrate-xml-views-to-jetpack-compose\" target=\"_blank\" rel=\"noopener\">migrate to Jetpack Compose<\/a>. As all the time, we worth your suggestions and have requests (particularly on <code>@Experimental<\/code> options which can be nonetheless baking) \u2014 please file them <a href=\"https:\/\/issuetracker.google.com\/issues\/new?component=612128\" target=\"_blank\" rel=\"noopener\">right here<\/a>. Completely satisfied composing!\n<\/p>\n<\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Posted by Meghan Mehta,\u00a0Android Developer Relations Engineer Right now, the Jetpack Compose April \u201826 launch is steady. This launch comprises model 1.11 of core Compose modules (see the full BOM mapping), shared ingredient debug instruments, trackpad occasions, and extra. We even have a couple of experimental APIs that we\u2019d love you to check out and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":25798,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":{"0":"post-25796","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-mobile"},"_links":{"self":[{"href":"https:\/\/aireviewirush.com\/index.php?rest_route=\/wp\/v2\/posts\/25796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aireviewirush.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aireviewirush.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aireviewirush.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aireviewirush.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25796"}],"version-history":[{"count":1,"href":"https:\/\/aireviewirush.com\/index.php?rest_route=\/wp\/v2\/posts\/25796\/revisions"}],"predecessor-version":[{"id":25797,"href":"https:\/\/aireviewirush.com\/index.php?rest_route=\/wp\/v2\/posts\/25796\/revisions\/25797"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aireviewirush.com\/index.php?rest_route=\/wp\/v2\/media\/25798"}],"wp:attachment":[{"href":"https:\/\/aireviewirush.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aireviewirush.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aireviewirush.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}