{"id":336283,"date":"2022-07-28T09:00:54","date_gmt":"2022-07-28T09:00:54","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=336283"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=336283","title":{"rendered":"<span>\u0410\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f Jetpack Compose \u0432 hh.ru<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435: \u0442\u0435\u043f\u043b\u044b\u0439 \u043e\u0441\u0435\u043d\u043d\u0438\u0439 \u0432\u0435\u0447\u0435\u0440, \u043d\u0430 \u0441\u0442\u043e\u043b\u0435 \u0447\u0430\u0448\u0435\u0447\u043a\u0430 \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u043a\u0443\u0441\u043d\u043e\u0433\u043e, \u0437\u0430 \u043e\u043a\u043d\u043e\u043c \u043f\u043e\u0440\u0445\u0430\u044e\u0442 \u043f\u043e\u0436\u0435\u043b\u0442\u0435\u0432\u0448\u0438\u0435 \u043b\u0438\u0441\u0442\u044c\u044f \u0438 \u0442\u043e\u043d\u043a\u043e \u043d\u0430\u0441\u0432\u0438\u0441\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0442\u0435\u0440. \u041d\u043e \u043d\u0430 \u0434\u0443\u0448\u0435 \u0441\u043a\u0440\u0435\u0431\u0443\u0442\u0441\u044f \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u043c\u044b\u0448\u0438. \u0418 \u0432\u0430\u043c \u0442\u043e\u0447\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u044d\u0442\u0438 \u043c\u044b\u0448\u0438 \u0440\u0430\u0441\u0442\u0443\u0442: \u0435\u0449\u0435 \u043b\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 Jetpack Compose, \u0430 \u0432\u044b \u0442\u0430\u043a\u0438 \u043d\u0435 \u0437\u0430\u0442\u0430\u0449\u0438\u043b\u0438 \u0435\u0433\u043e \u0432 \u0432\u0430\u0448\u0438 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432 \u0432\u0430\u0448\u0443 \u0441\u0432\u0435\u0442\u043b\u0443\u044e \u0433\u043e\u043b\u043e\u0432\u0443 \u0437\u0430\u0431\u0440\u0435\u0434\u0430\u0435\u0442 \u0448\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c: \u201c\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0434\u0430\u043a\u043e\u0435, \u0432\u0435\u043b\u0438\u043a\u043e\u0435 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0430\u0445\u043d\u0443\u043b\u0438 \u0432 \u0432\u043e\u0441\u0445\u0438\u0449\u0435\u043d\u0438\u0438 \u0438 \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a?\u201d \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0438\u0445 \u0438\u0434\u0435\u0439 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439: \u043b\u0438\u0431\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0447\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435, \u043b\u0438\u0431\u043e \u0432\u0441\u0451 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0436\u0430\u0441\u043d\u044b\u043c. \u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443 \u043d\u0430\u0441, \u044f \u0432\u0430\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443.\u00a0<\/p>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0421\u0442\u0440\u0435\u043b\u044c\u0447\u0435\u043d\u043a\u043e, \u044f Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 <a href=\"http:\/\/hh.ru\">hh.ru<\/a>. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0432\u0435\u0434\u0430\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f Jetpack Compose \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/6ff\/18f\/cb6\/6ff18fcb67a3fcc7f298f1d8688acb7e.jpeg\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ff\/18f\/cb6\/6ff18fcb67a3fcc7f298f1d8688acb7e.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0430\u043c\u0431\u0438\u0446\u0438\u043e\u0437\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443: \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\">Compose<\/a>. \u041f\u0440\u0438\u0447\u0435\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"http:\/\/hh.ru\">hh.ru<\/a>. \u0418 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0437\u0434\u0435\u0441\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f.<\/p>\n<p>\u0410 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u044b\u0435 playground-\u044b \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043e\u043d\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0430\u0433\u0430\u0436 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e.\u00a0<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0442\u043e\u043b\u044c\u043a\u043e-\u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442\u0435 \u0442\u043e\u0442 \u0436\u0435 Jetpack Compose \u0432 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442, \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u0441 \u0433\u0440\u0435\u0434\u043b\u043e\u043c (Gradle). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u0438\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f Jetpack Compose.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f Android SDK. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f Jetpack Compose 1.1 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f minCompileSdk 31, \u0430 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f Kotlin. \u0418 \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Kotlin \u2014 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u0430\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043b\u044e\u0441 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0435\u0449\u0435 \u0438 \u0441 \u0441\u0430\u043c\u0438\u043c Jetpack Compose \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c Jetpack Compose.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u0410 \u043f\u0440\u0438\u0432\u0435\u0434\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 View, \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\/accessibility\">accessibility \u0432 Compose<\/a>. \u041d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b <a href=\"https:\/\/support.google.com\/accessibility\/android\/answer\/6283677?hl=ru\">Talkback<\/a> (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f accessibility, \u0434\u043b\u044f \u043d\u0435\u0437\u0440\u044f\u0447\u0438\u0445 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0449\u0435\u043b\u043a\u0430\u044e\u0442 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u044d\u043a\u0440\u0430\u043d\u0430, \u0438 \u044d\u0442\u043e\u0442 talkback \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0438\u043c \u043d\u0430 \u0447\u0442\u043e \u043d\u0430\u0436\u0430\u043b\u0438) \u0438&#8230; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u0440\u0430\u0448\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435. \u042f \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u043c\u043e\u0433 \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c. <\/p>\n<p>\u0410 \u0434\u0435\u043b\u043e \u0431\u044b\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 AndroidX \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0431\u044b\u043b\u0438 \u043d\u0438\u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Jetpack Compose. \u041d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 Jetpack Compose \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0432\u0441\u0435 \u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0443 \u0432\u0430\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435, \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043b\u0438 \u0432\u0430\u043c \u0432\u0435\u0440\u0441\u0438\u0438 Gradle, \u0432\u0441\u0435 \u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Kotlin-\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.\u00a0<\/p>\n<\/div>\n<\/details>\n<p>\u0423 \u043d\u0430\u0441 \u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u0438 Gradle, Kotlin \u0438 Android. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 convention-\u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c Jetpack Compose \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0430 \u043d\u0435 \u043d\u0430 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0440\u0430\u0437\u0443. \u0422\u0430\u043a \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438, \u0438 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 convention-\u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Compose-\u0430 \u043a \u043c\u043e\u0434\u0443\u043b\u044e<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">import com.android.build.gradle.BaseExtension  configure&lt;BaseExtension> {     @Suppress(\"UnstableApiUsage\")     with(buildFeatures) {         compose = true     }      @Suppress(\"UnstableApiUsage\")     composeOptions {         kotlinCompilerExtensionVersion = \"1.1.1     } }  dependencies {     add(\"implementation\", \"androidx.compose.runtime:runtime:1.1.1\") } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u0414\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432 hh.ru<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e, \u0442\u043e \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u043c\u0430\u043a\u0435\u0442\u043e\u0432. \u0421\u044e\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u043e\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0446\u0432\u0435\u0442\u0430, \u0448\u0440\u0438\u0444\u0442\u044b, \u043e\u0442\u0441\u0442\u0443\u043f\u044b, \u0442\u0435\u043d\u0438, \u0442\u0430\u043a \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441 \u043a\u0443\u0447\u0435\u0439 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432. \u0422\u0443\u0434\u0435 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0432\u0441\u044f\u043a\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0430\u0448\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u043b\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0430\u0442\u043e\u043c\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0432 Figma \u0441 \u0446\u0432\u0435\u0442\u0430\u043c\u0438, \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438, \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf2\/e10\/b23\/bf2e10b239b509f4cf836776eec44d37.png\" alt=\"\u0410\u0442\u043e\u043c\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b\" title=\"\u0410\u0442\u043e\u043c\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf2\/e10\/b23\/bf2e10b239b509f4cf836776eec44d37.png\"\/><figcaption>\u0410\u0442\u043e\u043c\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/figcaption><\/figure>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438 \u043e\u043d\u0438 \u0438 \u043f\u0440\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0430\u043d\u043d\u0435\u0440\u0430\u043c\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eea\/bb5\/321\/eeabb5321735d8e3dbbaca5c00673be4.png\" alt=\"\u0423 \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u0435\u0441\u0442\u044c 4 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c \u0438 \u043f\u043e 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\" title=\"\u0423 \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u0435\u0441\u0442\u044c 4 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c \u0438 \u043f\u043e 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eea\/bb5\/321\/eeabb5321735d8e3dbbaca5c00673be4.png\"\/><figcaption>\u0423 \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u0435\u0441\u0442\u044c 4 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c \u0438 \u043f\u043e 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432<\/figcaption><\/figure>\n<p>\u0418\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043d\u043e\u043f\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d50\/938\/d79\/d50938d790f574352f0120ba84814eb4.png\" alt=\"\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043d\u043e\u043f\u043e\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435: 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (Title \/ Title Subtitle \/ etc) \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 12 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 84 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 >__&lt;&#187; title=&#187;\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043d\u043e\u043f\u043e\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435: 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (Title \/ Title Subtitle \/ etc) \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 12 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 84 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 >__&lt;&#187; width=&#187;1920&#8243; height=&#187;1080&#8243; data-src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d50\/938\/d79\/d50938d790f574352f0120ba84814eb4.png&#187;\/><figcaption>\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043d\u043e\u043f\u043e\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435: 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (Title \/ Title Subtitle \/ etc) \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 12 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 84 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 >__&lt;<\/figcaption><\/figure>\n<p>\u041f\u043e\u0447\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432.<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432 <a href=\"http:\/\/hh.ru\">hh.ru<\/a> \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u0441\u0438\u0441\u0442\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438. \u041e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u0430\u044f, \u0438 \u043c\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0438 \u0435\u0451 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 xml-\u0432\u044c\u044e\u0448\u043a\u0430\u0445. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u0436\u0438\u0440\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u0438\u0442\u0430\u044e\u0442: \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e xml-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0442\u044c\u043c\u0430 Kotlin-\u043e\u0432\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u044d\u0442\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u043e\u0434\u0443\u043b\u044c \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 XML<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/260\/431\/7d8\/2604317d8c1ff878a39a24d13b7303d9.png\" alt=\"\u041c\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 XML\" title=\"\u041c\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 XML\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/260\/431\/7d8\/2604317d8c1ff878a39a24d13b7303d9.png\"\/><figcaption>\u041c\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 XML<\/figcaption><\/figure>\n<p>\u042f \u043f\u043e\u043c\u043d\u044e \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u0440\u043e\u0445\u043e\u0439, \u043d\u043e \u0437\u0430 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u043f\u043d\u0443\u044e \u043e\u0441\u043e\u0431\u044c \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. <\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430 Jetpack Compose. \u041e\u0434\u0438\u043d \u0434\u043e\u0431\u043b\u0435\u0441\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c design system compose, \u043d\u0430\u0447\u0430\u043b \u043d\u0430\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0430\u0442\u043e\u043c\u044b \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u0440\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0443 \u0437\u0430\u0442\u0430\u0449\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043c \u0440\u0430\u0431\u043e\u0442 \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u043d\u0430\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0412\u0435\u0440\u043d\u0435\u0435, \u0437\u0430\u0434\u0430\u0447\u0430-\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u0430\u044f, \u043d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b, Jetpack Compose \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f, \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442 \u0441\u0442\u043e \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0411\u044b\u043b\u043e \u0438 \u0432\u043f\u0440\u0430\u0432\u0434\u0443 \u0433\u0440\u0443\u0441\u0442\u043d\u043e<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f4d\/a32\/9b2\/f4da329b2239cfd2f2bd41c746c321a1.png\" alt=\"\u042d\u0442\u043e \u0431\u044b\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0434\u0435\u043b\u044c &quot;\u0432\u043d\u0435\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0445&quot; \u0437\u0430\u043d\u044f\u0442\u0438\u0439\" title=\"\u042d\u0442\u043e \u0431\u044b\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0434\u0435\u043b\u044c &quot;\u0432\u043d\u0435\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0445&quot; \u0437\u0430\u043d\u044f\u0442\u0438\u0439\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f4d\/a32\/9b2\/f4da329b2239cfd2f2bd41c746c321a1.png\"\/><figcaption>\u042d\u0442\u043e \u0431\u044b\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0434\u0435\u043b\u044c &#171;\u0432\u043d\u0435\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0445&#187; \u0437\u0430\u043d\u044f\u0442\u0438\u0439<\/figcaption><\/figure>\n<p>\u041a\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e, \u0430 \u043d\u0430\u0434 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0448\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u0438\u0439 Button (\u0445\u043e\u0442\u044f \u0431\u044b \u0438\u0437-\u0437\u0430 \u043d\u0430\u0448\u0438\u0445 \u0441\u0442\u0438\u043b\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043c\u0430\u0442\u0447\u0430\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/material\/package-summary#MaterialTheme(androidx.compose.material.Colors,androidx.compose.material.Typography,androidx.compose.material.Shapes,kotlin.Function0)\">MaterialTheme<\/a>, \u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432), \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441 \u043d\u0443\u043b\u044f \u043d\u0430 Surface-\u0435. Banner-\u044b \u0442\u043e\u0436\u0435 \u043e\u0442\u043d\u044f\u043b\u0438 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u0432\u0441\u0451 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0433 \u0440\u0435\u0448\u0438\u0442\u044c, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 Constraint-\u0435 (\u043e\u043d \u0432 Compose-\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0433\u043a\u0430 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e), \u0438\u043b\u0438 \u0436\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 Column-\u0430\u0445 \u0438 Row.  <\/p>\n<\/div>\n<\/details>\n<h3>\u0421\u043c\u0435\u043d\u0430 \u0444\u043e\u043a\u0443\u0441\u0430<\/h3>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0434\u043e\u0431\u043b\u0435\u0441\u0442\u043d\u044b\u0439, \u043d\u043e \u0443\u0434\u0440\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u0430\u043a\u0438\u043c \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u0448\u0435\u043b \u043a \u0442\u0438\u043c\u043b\u0438\u0434\u0443 \u0437\u0430 \u0441\u043e\u0432\u0435\u0442\u043e\u043c. \u0418 \u0442\u043e\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 Jetpack Compose \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u044d\u043a\u0440\u0430\u043d\u0447\u0438\u043a. \u0422\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u043d\u0430 Jetpack Compose \u0438 \u043f\u043e\u0439\u043c\u0435\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430.\u00a0<\/p>\n<p>\u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0441\u0442\u043e\u043f\u0443\u0434\u043e\u0432\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u0441\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442. \u0410 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0449\u0435 \u0438 \u0434\u0435\u043c\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0441\u0432\u043e\u0451 \u043c\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442 \u0438 \u0434\u0430\u043b\u0430 \u0444\u0438\u0434\u0431\u044d\u043a.<\/p>\n<h3>\u041f\u0435\u0440\u0432\u0430\u044f \u0436\u0435\u0440\u0442\u0432\u0430 \u0434\u043b\u044f Jetpack Compose\u00a0<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0436\u0435\u0440\u0442\u0432\u044b \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u044d\u043a\u0440\u0430\u043d \u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0439 \u0442\u0430\u043c \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u043a\u0440\u0430\u043d &#171;\u041e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438&#187;?<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bc\/e8c\/dec\/6bce8cdec4b942c7c0a46d4b2e6f48e8.png\" alt=\"\" title=\"\" width=\"299\" height=\"620\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6bc\/e8c\/dec\/6bce8cdec4b942c7c0a46d4b2e6f48e8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0432\u0435\u0440\u0445\u044a\u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u044d\u043a\u0440\u0430\u043d \u0432\u0441\u0451 \u0435\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b: \u0446\u0432\u0435\u0442\u0430, \u0448\u0440\u0438\u0444\u0442\u044b, \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0432\u044c\u044e\u0448\u043a\u0438, \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043b\u044f RecyclerView, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c.\u00a0<\/p>\n<p>\u0418 \u0432-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u044d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043d\u0430 \u043d\u0435\u0433\u043e \u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442. \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441 \u043c\u043d\u043e\u0433\u043e\u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u0438 \u043d\u0430\u0447\u043d\u0443\u0442\u0441\u044f \u043a\u0440\u0430\u0448\u0438, \u0442\u043e \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0432\u0430\u043b\u0438\u0442 \u0437\u0430 \u0441\u043e\u0442\u043d\u0438 \u0442\u044b\u0441\u044f\u0447. \u0410 \u044d\u0442\u043e, \u043a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u0421 \u0436\u0435\u0440\u0442\u0432\u043e\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c, \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c. \u041f\u0435\u0440\u0435\u0432\u0435\u043b\u0438, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u043b\u0438 \u0434\u0432\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u0447\u043a\u0438 \u2014 \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0439\u0434\u0438 \u043f\u044f\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u0439<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d89\/6ee\/cb1\/d896eecb12de5cd9f71b4d0c42fb691a.png\" alt=\"\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c XML (\u0441\u043b\u0435\u0432\u0430) \u0438 Compose (\u0441\u043f\u0440\u0430\u0432\u0430)\" title=\"\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c XML (\u0441\u043b\u0435\u0432\u0430) \u0438 Compose (\u0441\u043f\u0440\u0430\u0432\u0430)\" width=\"876\" height=\"832\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d89\/6ee\/cb1\/d896eecb12de5cd9f71b4d0c42fb691a.png\"\/><figcaption>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c XML (\u0441\u043b\u0435\u0432\u0430) \u0438 Compose (\u0441\u043f\u0440\u0430\u0432\u0430)<\/figcaption><\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0442\u043e\u0447\u043d\u043e \u0435\u0441\u0442\u044c, \u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u044f\u0442\u0438 =) <\/p>\n<\/div>\n<\/details>\n<h3>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u043a\u0440\u0430\u043d\u0430 &#171;\u041e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438&#187;<\/h3>\n<p>\u041d\u043e \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438? \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0441\u0445\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, \u043e\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430: \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0435 onCreateViev \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044c\u044e\u0448\u043a\u0438 \u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0434\u043b\u044f\u00a0 RecyclerView, \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0430 ViewModel, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 UiState \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0435\u0435 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u0410 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0431\u0440\u0430\u043b \u044d\u0442\u043e\u0442 State \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u0435\u0433\u043e \u0432 RecyclerView \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/877\/962\/ebb\/877962ebbdbd15ecd384aec5d75c17c3.png\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/877\/962\/ebb\/877962ebbdbd15ecd384aec5d75c17c3.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u043d\u0430 RecyclerView.<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e ViewModel. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0435, \u0434\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043d\u0430 Compose, \u0431\u044b\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 UiConverter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u043b \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f RecyclerView. <\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 XML-\u043e\u0439 ViewModel<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">internal class AboutViewModel @Inject constructor(     private val deps: AboutDeps,     private val uiConverter: AboutUiConverter, ) : ManualStateViewModel&lt;Nothing, AboutUiState>() {      ...      override fun onFirstAttach() {         super.onFirstAttach()         setState(             state = uiConverter.toUiState(               deps.getAboutScreenModel(), listeners             )         )     }  }<\/code><\/pre>\n<p>ManualStateViewModel \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 ViewModel \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c rx-\u043e\u0432\u043e\u0433\u043e BehaviorSubject-\u0430 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 UiState.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u044d\u0442\u043e\u0442 \u044d\u043a\u0440\u0430\u043d \u043d\u0430 Compose, \u043d\u0430\u043c \u044d\u0442\u043e\u0442 UI \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441\u0442\u0430\u043b \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0438 \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u2014 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u043d\u0434\u0435\u0440.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f Compose-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">internal class AboutComposeViewModel @Inject constructor(     private val deps: AboutDeps, ) : ManualStateViewModel&lt;Nothing, AboutScreenModel>() {      override fun onFirstAttach() {         super.onFirstAttach()          setState(deps.getAboutScreenModel())     }    ...  } <\/code><\/pre>\n<p>UiConverter \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0441\u0442\u0430\u043b \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u0435\u043d, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0430 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u0430\u0445: \u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0443\u0441\u043e\u0447\u0435\u043a UI, \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043c\u0430\u043f\u0438\u0442\u044c domain-\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0432 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 ui-\u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0436\u0435\u0447\u043a\u043e \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u043b\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u0420\u0430\u043d\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0432 \u043d\u0435\u043c \u0431\u044b\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044c\u044e\u0448\u0435\u043a, RecyclerView-\u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f RenderState. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434 UiState \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 RecyclerView.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u044c\u0448\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">internal class AboutFragment : BaseFragment(R.layout.fragment_about) {    ...        private val viewModel: AboutViewModel by viewModelPlugin(         renderState = this::renderState,         viewModelProvider = { di.getInstance() }     )      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {         super.onViewCreated(view, savedInstanceState)         view.findViewById&lt;MaterialToolbar>(DesignSystemR.id.toolbar)?.apply {             setTitle(R.string.about_screen_title)             setNavigationIcon(DesignSystemR.drawable.ic_arrow_back)             setNavigationOnClickListener { activity?.onBackPressed() }         }         setupRecyclerView()     }          private fun setupRecyclerView() {         with(binding.fragmentAboutRecyclerContent) {             isNestedScrollingEnabled = false             adapter = delegateAdapter             layoutManager = LinearLayoutManager(context)         }     }  \/\/ \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 UiState-\u0430      private fun renderState(state: AboutUiState) {         delegateAdapter.submitList(state.items)     }      }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043d\u0430 Compose \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 onCreateView \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u043e\u0439 \u0432\u044c\u044e\u0448\u043a\u0438, \u0430 \u043c\u0435\u0442\u043e\u0434 <em>renderState<\/em> \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u043b\u0441\u044f. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\/interop\/interop-apis#compose-in-views\">setContent<\/a>, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u043c\u0438\u0440 XML \u0441 \u043c\u0438\u0440\u043e\u043c Jetpack Compose. \u0418 \u0432\u043e\u0442 \u0442\u0443\u0434\u0430 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0438 \u0442\u0443 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u0448 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0445\u0443\u0434\u0435\u043b, \u0438\u0437 \u043d\u0435\u0433\u043e \u0438\u0441\u0447\u0435\u0437\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u044c\u044e\u0448\u0435\u043a.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {   return ComposeView(requireContext()).also(ComposeView::addSystemTopMargin) }   private fun renderState(model: AboutScreenModel) {   (view as? ComposeView)?.setContent {     HHTheme {       AboutScreen(         aboutScreenModel = model,         clicks = AboutComposeClicks(           onBackIconClicked = { activity?.onBackPressed() },           onOfficialPageLinkClicked = { viewModel.onLinkClicked(it) },           onSocialNetworkLinkClicked = { viewModel.onSocialNetworkLinkClicked(it) },           onRateAppClicked = { viewModel.onRateAppClicked() },         ),         modifier = Modifier.fillMaxSize()       )     }   } ?: error(\"Root view is not ComposeView, or null | $view\") }<\/code><\/pre>\n<p>\u041d\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 27.07.2022 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0443\u0436\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f, \u043c\u044b \u043d\u0430\u043a\u0440\u0443\u0442\u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u2014 \u0432\u0435\u0440\u0441\u0442\u043a\u0443 \u0441\u0435\u043a\u0446\u0438\u0439 \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 Compose. \u0414\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044d\u043a\u0440\u0430\u043d \u0441 Toolbar \u0438 RecyclerView. \u0412\u0441\u0451 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u043e \u0432 LinearLayout. <\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c?..<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?> &lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"     android:layout_width=\"match_parent\"     android:layout_height=\"match_parent\"     android:orientation=\"vertical\">      &lt;include         android:id=\"@+id\/fragment_about_appbar\"         layout=\"@layout\/toolbar\" \/>      &lt;androidx.recyclerview.widget.RecyclerView         android:id=\"@+id\/fragment_about_recycler_content\"         android:layout_width=\"match_parent\"         android:layout_height=\"match_parent\"         android:clipToPadding=\"false\"         android:persistentDrawingCache=\"animation|scrolling\"         android:scrollbarStyle=\"outsideOverlay\" \/>  &lt;\/LinearLayout> <\/code><\/pre>\n<p>\u042f \u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b! \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 Compose \u043a\u043e\u0434\u0430 \u0441\u0442\u0430\u043b\u043e \u0432 \u0440\u0430\u0437\u044b \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u0439 \u044d\u043a\u0440\u0430\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430. \u0412 \u043d\u0435\u0439 \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u044b\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435, \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440-\u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 \u0438 \u0432\u043d\u0438\u043a\u0430\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u044b\u043b\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u044b \u044f\u0447\u0435\u0439\u043a\u0438. \u0412\u0441\u0451 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u043b\u043e \u043e\u0449\u0443\u0442\u0438\u043c\u043e \u043f\u0440\u043e\u0449\u0435.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434\u0430 \u0441\u0442\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u043e\u043d \u0441\u0442\u0430\u043b \u043f\u0440\u043e\u0449\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">@Composable internal fun AboutScreen(     viewModel: AboutComposeViewModel,     modifier: Modifier = Modifier,     onBackIconClicked: () -> Unit, ) {     val state = viewModel.subscribeUiState(initial = AboutScreenModel()).value      Scaffold(         topBar = { AboutScreenToolbar(onBackIconClicked) },         backgroundColor = HHColors.white,         modifier = modifier,     ) {         Column(             modifier = Modifier                 .verticalScroll(rememberScrollState()),         ) {             AboutScreenHeader(                 headerModel = state.headerModel,                 modifier = Modifier                     .padding(start = 16.dp, end = 16.dp, top = 28.dp, bottom = 24.dp)                     .align(Alignment.CenterHorizontally)                     .testTag(AboutScreenTestTags.header),             )             LinksSection(                 viewModel = viewModel,                 links = state.links,             )              if (state.socialNetworkLinks.isNotEmpty()) {                 Spacer(modifier = Modifier.size(HHDimens.spacer.xs))                 SectionHeaderSmall(header = stringResource(id = R.string.about_screen_official_pages))                 LinksSection(                     viewModel = viewModel,                     links = state.socialNetworkLinks,                 )                 Spacer(modifier = Modifier.size(HHDimens.spacer.m))             }         }     } }<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0438 \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u043e\u0434\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e, \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0438\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430 \u2014 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438\u043a\u043e\u043d\u043a\u0430 \u0441 \u043b\u043e\u0433\u043e\u0442\u0438\u043f\u043e\u043c, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"kotlin\">@Composable private fun AboutScreenHeader(     headerModel: AboutScreenHeaderModel,     modifier: Modifier = Modifier, ) {     Column(         modifier = modifier,         horizontalAlignment = Alignment.CenterHorizontally,     ) {         headerModel.headerAppIcon?.let { iconRes ->             Image(                 painter = painterResource(id = iconRes),                 contentDescription = null,                 modifier = Modifier                     .size(76.dp),             )         } SpacerS()         Text(             text = headerModel.appName,             style = HHTextStyles.Title1,             color = HHColors.black,         )         SpacerXXS()         Text(             text = stringResource(               id = R.string.about_screen_app_version,                headerModel.appVersion             ),             style = HHTextStyles.Caption2,             color = HHColors.gray,         )     } }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u043c \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u0432 \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u0432 \u0441\u0430\u043c\u0438\u0445 \u043a\u0443\u0441\u043e\u0447\u043a\u0430\u0445 \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e. <\/p>\n<\/div>\n<\/details>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 Compose \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<p><strong>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445,<\/strong> \u0441 Compose \u043f\u0440\u043e\u0449\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 View. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0430 XML. \u0422\u0430\u043c, \u043a\u043e\u0433\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0439 \u0432\u044c\u044e\u0448\u043a\u0438, \u0442\u0435\u0431\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c XML-\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e\u0434 \u0432\u0435\u0440\u0441\u0442\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0441\u0434\u0435\u043b\u0430\u0442\u044c Kotlin-\u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 inflate-\u0438\u0442\u044c \u0438\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u0432\u044c\u044e\u0448\u043a\u0443. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u0442\u044b \u0435\u0449\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0448\u044c \u043f\u043e\u0434 \u043d\u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 XML-\u0444\u0430\u0439\u043b, \u043a\u0430\u043a-\u0442\u043e \u0438\u0445 \u043f\u0430\u0440\u0441\u0438\u0448\u044c, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0448\u044c \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043e\u0447\u0435\u043d\u044c \u0443\u0441\u0442\u0430\u0435\u0448\u044c \u0443\u0436\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0440\u043e \u044d\u0442\u043e \u0432\u0441\u0451.\u00a0<\/p>\n<p>\u0410 Compose \u043f\u043e\u043e\u0449\u0440\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044c\u044e\u0448\u043a\u0443, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 (\u0445\u0432\u0430\u043b\u0430 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0443!), \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0438 \u0432\u0441\u0451. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0432\u044c\u044e\u0448\u043a\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b.\u00a0<\/p>\n<p><strong>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445,<\/strong> \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0432\u044c\u044e. \u0412 XML \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 namespace, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f <a href=\"https:\/\/developer.android.com\/studio\/write\/tool-attributes\">tools<\/a>. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0432\u0430\u0448\u0435\u0439 View \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Layout-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u043e\u043c: \u0446\u0432\u0435\u0442 background-\u0430, \u0448\u0440\u0438\u0444\u0442\u044b, \u0446\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0432\u044c\u044e \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0432\u044c\u044e\u0448\u043a\u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438-\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e View, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 XML-\u043d\u044b\u0439 \u0444\u0430\u0439\u043b: \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0434, \u043c\u0435\u043d\u044f\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442.\u00a0<\/p>\n<p>\u0412 Compose \u0435\u0441\u0442\u044c <a href=\"https:\/\/developer.android.com\/jetpack\/compose\/tooling\">\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f @Preview<\/a>, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438\u0431\u043e \u0432\u0437\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u044d\u0442\u043e\u0439 \u0432\u044c\u044e\u0448\u043a\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043b\u0438\u0431\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043f\u0440\u0435\u0432\u044c\u044e \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u0441\u043c\u043e\u0442\u0440\u044f\u0442\u0441\u044f \u0432 Layout-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0435 \u0432\u043c\u0435\u0441\u0442\u0435. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f @Preview \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 <a href=\"https:\/\/issuetracker.google.com\/issues\/224572530\">\u0442\u043e\u043b\u044c\u043a\u043e \u0432 application-\u043c\u043e\u0434\u0443\u043b\u044f\u0445<\/a>, \u043d\u043e \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0439 \u0444\u0438\u0447\u0438 <a href=\"https:\/\/issuetracker.google.com\/issues\/224527709\">\u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c<\/a> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 build.gradle.<\/p>\n<\/div>\n<\/details>\n<p><strong>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445,<\/strong> \u0441\u0442\u0430\u043b\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b. \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u0434\u043b\u044f RecyclerView.\u00a0<\/p>\n<h3>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e AdapterDelegate<\/h3>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 RecyclerView \u0438 \u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <a href=\"http:\/\/hannesdorfmann.com\/android\/adapter-delegates\/\">Adapter Delegate<\/a>-\u044b. \u042d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 RecyclerView, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u044e\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 ViewType, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 ViewType\u2019s \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435.\u00a0<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 AdapterDelegate \u043d\u0430\u0446\u0435\u043b\u0435\u043d \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u0443\u043c\u0435\u0435\u0442 \u0438\u043d\u0444\u043b\u0435\u0439\u0442\u0438\u0442\u044c \u0438 \u0431\u0438\u043d\u0434\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0435. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0443 \u0432\u0430\u0441 \u0431\u044b\u043b\u043e \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435. \u041f\u0443\u0441\u0442\u044c \u0438 \u043d\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0435, \u043d\u043e \u0438\u0434\u0435\u044f \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0439 \u0436\u0435. <\/p>\n<pre><code class=\"kotlin\">class AddressAdapterDelegate(   private val action: (AddressDisplayableItem) -> Unit ) : BaseAdapterDelegate&lt;AddressDisplayableItem, DisplayableItem, BaseViewHolder>() {      override fun onCreateViewHolder(layoutInflater: LayoutInflater, parent: ViewGroup): RecyclerView.ViewHolder {         return fromLayoutId(R.layout.item_address_suggest, layoutInflater, parent)     }      override fun isForViewType(item: DisplayableItem, items: List&lt;DisplayableItem>, position: Int): Boolean {         return item is AddressDisplayableItem     }      override fun onBindViewHolder(item: AddressDisplayableItem, viewHolder: BaseViewHolder) {         with(viewHolder.getViewBinding(ItemAddressSuggestBinding::bind)) {             itemAddressSuggestPrimary.text = item.firstAddress             itemAddressSuggestSecondary.text = item.secondAddress             root.setOnClickListener { action.invoke(item) }         }     } }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e ViewType \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 AdapterDelegate, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u043b\u0438 \u0438\u0445 \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 Delegate \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0432 RecyclerView-\u0430\u0434\u0430\u043f\u0442\u0435\u0440. \u0417\u0430\u0442\u0435\u043c \u0432\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u043a RecyclerView \u0438 \u0432\u0430\u0448 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0433 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432.\u00a0<\/p>\n<pre><code class=\"kotlin\">private fun initDelegationAdapter(): DelegationAdapter&lt;DisplayableItem> {   return DelegationAdapter&lt;DisplayableItem>().withDelegates(     ArticleDelegate { articleCode -> viewModel.onItemClicked(articleCode) },     LoadingAdapterDelegate(),     ErrorAdapterDelegate(       defaultText = getString(ApplicantCoreUiBaseR.string.default_list_paginator_next_page_error),       refreshButtonText = getString(ApplicantCoreUiBaseR.string.action_update),       click = { viewModel.onLoadNextPageAction() }     )   ) }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u043e \u0442\u0443\u0442 \u043d\u0430\u0448 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u044f\u0447\u0435\u0439\u043a\u0438 \u2013 Cell-\u044b. \u0418\u0445 \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0435\u0439. \u0415\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u0430\u0432\u043e\u0439. \u0414\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u0438\u0445 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0435\u043b\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 RecyclerView.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e?<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/277\/2a5\/f14\/2772a5f14931068af2ae492029f12ae0.png\" alt=\"\" title=\"\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/277\/2a5\/f14\/2772a5f14931068af2ae492029f12ae0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 14 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u0430\u0432\u043e\u0439, \u0432\u0441\u0435\u0433\u043e-\u0442\u043e 98 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a\u043e\u0435 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443 \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u0438\u0437 iOS, \u0438 \u043e\u043d\u043e \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f, \u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043b\u0438\u0430\u0441\u044b \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u043b\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043b\u0435\u0432\u0443\u044e, \u0438 \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0438\u0445 \u0434\u0432\u0443\u043c\u044f \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0430\u043c\u0438 \u2014 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a \u043f\u0440\u0430\u0432\u043e\u0439.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0430\u0440\u043e\u0447\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"swift\">public typealias IconTitleChevronItem = LeftRightItem&lt;LeftIconTitle, RightChevron>  public typealias CheckboxSubtitleDetailItem = LeftRightItem&lt;LeftCheckboxSubtitle, RightDetail>  public typealias ExpandTagsItem = LeftRightItem&lt;ExpandTagsContent, LeftRightEmptyContent><\/code><\/pre>\n<p>\u041e\u0447\u0435\u043d\u044c \u043a\u043b\u0430\u0441\u0441\u043d\u0430\u044f \u0444\u0438\u0447\u0430 Swift \u2014 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c generic-\u0442\u0438\u043f \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430:<\/p>\n<pre><code class=\"swift\">public final class ContainerCell&lt;ContentView: ContainerContentView>: UICollectionViewCell {    ...  private let itemContentView: ContentView    public override init(frame: CGRect = .zero) {     \/\/ \u043d\u0443 \u0432\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u043b\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 generic-\u0430, \u043a\u0430\u043a \u0442\u0430\u043a-\u0442\u043e?     itemContentView = ContentView(frame: frame).configureForAutoLayout()      super.init(frame: frame)      backgroundColor = .clear     clipsToBounds = false      setupItemContentView()     setupLongPresspGestureRecognizer()   }  } <\/code><\/pre>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0432 typealias \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438. <\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u0438\u2026 \u041f\u0440\u043e\u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435 \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0435 \u0441\u0442\u0430\u0434\u0438\u0438 \u2013 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435, \u0433\u043d\u0435\u0432, \u0442\u043e\u0440\u0433 \u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443. <\/p>\n<p>\u0418\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u201c\u0434\u0430 \u0432\u0441\u0451 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u0434\u0432\u0430 \u0441\u0447\u0435\u0442\u0430\u201d \u043c\u044b \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043a \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f\u043c, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043d\u0430\u043c \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c. \u0410 \u0437\u0430\u0442\u0435\u043c \u0438 \u0432\u043e\u0432\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0438\u043b\u0438\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u043e\u0432\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0443 \u0440\u0435\u0431\u044f\u0442 \u0432 iOS.<\/p>\n<p>\u0410 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u043e\u0442 \u0447\u0442\u043e: \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u043e\u0432\u0435\u0440\u0445 RecyclerView, \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0430\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0431\u0438\u043d\u0434\u0438\u043d\u0433, \u0438\u043d\u0444\u043b\u0435\u0439\u0442, \u0434\u0438\u0444\u0438\u043d\u0433 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0434\u043e \u0443\u0436\u0430\u0441\u0430 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432, \u0430 \u0435\u0449\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u042d\u0442\u043e \u0431\u044b\u043b \u043f\u0440\u043e\u0432\u0430\u043b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u0437 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">class IconTitleCell&lt;DataModel>(     val id: String,     override val dataModel: DataModel,     override val icon: CellIcon,     override val title: CellTitle,     override val isDisabled: Boolean = false,     override val separatorType: SeparatorType = SeparatorType.FULL,     override val clickListener: IconTitleCellClickListener&lt;DataModel>? = null,     override val paddingStart: Padding = Padding.NONE, ) : CompoundCell&lt;ImageTitleLeftCellModel, EmptyRightCellModel, DataModel>(     leftModel = ImageTitleLeftCellModel(         image = icon.toCellImage(),         title = title     ),     rightModel = EmptyRightCellModel(),     dataModel = dataModel,     isDisabled = isDisabled,     separatorType = separatorType,     clickListener = clickListener ),     WithCellIcon,     WithCellTitle,     WithCompoundCell&lt;ImageTitleLeftCellModel, EmptyRightCellModel, DataModel> {      override val diffingStrategy: CellDiffingStrategy by IdContentDiffingStrategy(         diffId = id,         diffContent = DiffContent(             leftModel = leftModel,             baseDiffContent = getBaseDiffContent()         )     )       private data class DiffContent&lt;DataModel>(         private val leftModel: ImageTitleLeftCellModel,         private val baseDiffContent: BaseDiffContent&lt;DataModel>,     )  }<\/code><\/pre>\n<p>\u0422\u043e\u043d\u043d\u0430 generic-\u043e\u0432, \u043a\u0443\u0447\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f diffing-\u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0443 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u0449\u0438\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a override-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432&#8230; \u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u0438\u043c\u0435\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/div>\n<\/details>\n<p>\u0410 \u043d\u0430 Compose \u0432\u0435\u0441\u044c \u043d\u0430\u0448 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u044f\u0447\u0435\u0435\u043a \u0443\u043c\u0435\u0441\u0442\u0438\u043b\u0441\u044f \u0432 80 \u0441\u0442\u0440\u043e\u043a. <\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0435\u0441\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u044f\u0447\u0435\u0435\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">@Composable fun HHCellCarcass(     isEnabled: Boolean,     separatorStyle: SeparatorStyle,     modifier: Modifier = Modifier,     cornersStyle: CornersStyle = CornersStyle.Rectangle,     onClick: (() -> Unit)? = {},     right: @Composable (() -> Unit)? = null,     left: @Composable () -> Unit, ) {     val shape = cornersStyle.toShape()     val alpha = when {         onClick == null || isEnabled -> ThemeConstants.FULL_ALPHA_VALUE         else -> ThemeConstants.DISABLED_ELEMENT_ALPHA_VALUE     }      val clickAndSemanticsModifier = if (onClick != null) {         Modifier.clickable(             interactionSource = remember { MutableInteractionSource() },             indication = rememberRipple(color = HHColors.ripple),             enabled = isEnabled,             onClickLabel = null,             role = null,             onClick = onClick         )     } else {         Modifier     }      CellCarcassBox(         alpha = alpha,         shape = shape,         separatorStyle = separatorStyle,         modifier = modifier,         clickAndSemanticsModifier = clickAndSemanticsModifier,         right = right,         left = left     ) }  @Composable private fun CellCarcassBox(     alpha: Float,     shape: Shape,     separatorStyle: SeparatorStyle,     modifier: Modifier,     clickAndSemanticsModifier: Modifier,     right: @Composable (() -> Unit)? = null,     left: @Composable () -> Unit, ) {     Box(         modifier = modifier             .alpha(alpha)             .clip(shape)             .then(clickAndSemanticsModifier)     ) {         Column(verticalArrangement = Arrangement.Top) {             Row(                 horizontalArrangement = Arrangement.Start,                 verticalAlignment = Alignment.CenterVertically             ) {                 Box(Modifier.weight(1f)) {                     left()                 }                 if (right != null) {                     Spacers.XSSpacer(Spacers.Direction.Horizontal)                     right()                 } else {                     Spacers.MSpacer(Spacers.Direction.Horizontal)                 }             }             Row {                 CellSeparator(                     modifier = Modifier                         .weight(1f),                     separatorStyle = separatorStyle                 )             }         }     } }<\/code><\/pre>\n<p>\u0421 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=_XJnMs_nKZY&amp;ab_channel=hhtech\">\u0432\u044b\u0445\u043e\u0434\u0430 \u0432\u0438\u0434\u0435\u043e<\/a> \u0432 &#171;\u041e\u0445\u044d\u0445\u044d\u043d\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u0445&#187; \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0438\u0441\u044c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c weight \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u044f \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0442\u0430\u0449\u0438\u043b\u0438 weight \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u043a\u0430\u0441. \u0410 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f expandable-\u044f\u0447\u0435\u0439\u043a\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0431\u0438\u0440\u0430\u0442\u044c click \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 alpha \u0438 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0432 \u0432\u0438\u0434\u0435\u043e<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">@Composable internal fun HHCellCarcass(     isEnabled: Boolean,     separatorStyle: SeparatorStyle,     modifier: Modifier = Modifier,     cornersStyle: CornersStyle = CornersStyle.Rectangle,     onClick: () -> Unit = {},     content: @Composable RowScope.() -> Unit, ) {     Surface(         modifier = modifier             .alpha(if (isEnabled) ThemeConstants.FULL_ALPHA_VALUE else ThemeConstants.DISABLED_ELEMENT_ALPHA_VALUE),         shape = cornersStyle.toShape(),         interactionSource = remember { MutableInteractionSource() },         indication = rememberRipple(color = HHColors.colorRipple),         enabled = isEnabled,         onClick = onClick     ) {         Column(verticalArrangement = Arrangement.Top) {             Row(                 horizontalArrangement = Arrangement.Start,                 verticalAlignment = Alignment.CenterVertically             ) {                 content()             }             Row {                 CellSeparator(                     modifier = Modifier                         .weight(1f),                     separatorStyle = separatorStyle                 )             }         }     } }<\/code><\/pre>\n<p>\u0418 \u044d\u0442\u043e\u0442 \u043a\u0430\u0440\u043a\u0430\u0441 \u0442\u043e\u0436\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0435\u0448\u0430\u043b \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u0412\u0435\u0441\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u0432\u0435\u0447\u0435\u0440. \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043a\u0430\u0440\u043a\u0430\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u043b\u0435\u0432\u0443\u044e \u0438 \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u201c\u044f\u0447\u0435\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\/\u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u201d, \u201c\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u043b\u044c\u0444\u0443\u201d, \u201c\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\/\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435\u201d \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435). <\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 Compose<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">@Composable fun CheckboxCell(     checked: Boolean,     title: String,     modifier: Modifier = Modifier,     titleAlignment: Alignment.Vertical = Alignment.Top,     subtitle: String? = null,     isEnabled: Boolean = true,     separatorStyle: SeparatorStyle = SeparatorStyle.None,     onClick: () -> Unit,     onCheckboxClick: (() -> Unit)? = null, ) {     HHCellCarcass(         isEnabled = isEnabled,         separatorStyle = separatorStyle,         modifier = modifier,         onClick = onClick     ) {         CellLeftCheckbox(             checked = checked,             title = title,             titleAlignment = titleAlignment,             subtitle = subtitle,             onCheckboxClick = onCheckboxClick,         )     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430 \u0438 \u0441\u0430\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0449\u0435. \u0414\u0430, \u0432 \u043d\u0438\u0445 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u043e \u0441\u0430\u043c\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u0442\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u043e\u0441\u044c. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0431\u0435\u0434\u0430 Compose. <\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043c \u0441 UI-\u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/h3>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 Jetpack Compose \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0440\u0435\u0441\u0435\u0440\u0447\u0438\u0442\u044c, \u043a\u0430\u043a \u043e\u0431\u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0441 UI-\u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c, \u0438 \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0443\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441.\u00a0<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0441\u0435\u0440\u0447\u0430 \u043c\u044b \u0441\u043b\u0435\u0437\u043b\u0438 \u0441 \u043d\u0430\u0448\u0438\u0445 \u0444\u043e\u0440\u043a\u043e\u0432 <a href=\"https:\/\/github.com\/KasperskyLab\/Kaspresso\">Kaspresso<\/a> \u0438 <a href=\"https:\/\/github.com\/MarathonLabs\/marathon\">Marathon<\/a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0434\u0435\u043b\u0438 \u0430\u0436 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430. \u041e\u043d\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0443 \u043d\u0430\u0441, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c Allure-\u043e\u0442\u0447\u0435\u0442\u044b \u0441 \u0448\u0430\u0433\u0430\u043c\u0438, \u043d\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Kaspresso \u0438 Marathon \u0443\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438, \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Jetpack Compose. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u043b\u0438 \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Allure-\u043e\u0442\u0447\u0451\u0442\u044b \u0441 \u0448\u0430\u0433\u0430\u043c\u0438?..<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ec0\/7ca\/8af\/ec07ca8afc5a9c003edf74e76d8e8613.png\" width=\"3580\" height=\"1660\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ec0\/7ca\/8af\/ec07ca8afc5a9c003edf74e76d8e8613.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Kaspresso \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e <a href=\"https:\/\/github.com\/KasperskyLab\/Kaspresso\/blob\/master\/wiki\/09_Kaspresso-Allure.md\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0442\u0447\u0451\u0442\u043e\u0432 <\/a>\u0441 \u0448\u0430\u0433\u0430\u043c\u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 test runner.<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c &#171;\u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0435&#187; UI-\u0442\u0435\u0441\u0442\u044b. \u041e\u043d\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043f\u043e \u0447\u0430\u0441\u0442\u0438 XML-\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0441 Jetpack Compose-\u0432\u0438\u0434\u0436\u0435\u0442\u0430\u043c\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u043b\u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 assert-\u044b \u0432 Compose-\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u0438 \u0432\u0440\u043e\u0434\u0435 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043b\u044f Compose-\u044d\u043a\u0440\u0430\u043d\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">internal class AboutScreenTest : AppicantTestCase() {      private val aboutComposeScreen = AboutComposeScreen(composeTestRule)      @Test     @MoreScreenSuit     fun checkAboutScreenHeader() {         init {             \/\/ do nothing         }.run {             step(\"\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d About\") {                 navigation { openMoreScreen() }                 moreScreen.actions { openAbout() }             }              step(\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0434\u043b\u044f \\\"\u0420\u043e\u0441\u0441\u0438\u0438\\\"\") {                 aboutComposeScreen {                     checks {                         assertHeaderIsDisplayed()                         assertHeaderText(\"HeadHunter\")                         assertOfficialPagesSectionDisplayed()                     }                      actions {                         clickOnBackButton()                     }                 }             }              step(\"\u041c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d About\") {                 moreScreen.actions { changeCountry(\"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c\") }                 navigation { openMoreScreen() }                 moreScreen.actions { openAbout() }             }              step(\"\u0415\u0449\u0451 \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430\") {                 aboutComposeScreen {                     checks {                         assertHeaderIsDisplayed()                         assertHeaderText(\"rabota.by\")                         assertOfficialPagesSectionDisplayed()                     }                 }             }         }     }  }<\/code><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u0430 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u2014 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Compose-\u0432\u0438\u0434\u0436\u0435\u0442\u0430\u043c\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/ui\/test\/junit4\/ComposeTestRule\">ComposeTestRule<\/a>. \u0418 \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c fabric-\u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e Rule-\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Activity \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0434\u043e\u0448\u0451\u043b <em>createEmptyComposeRule<\/em>:<\/p>\n<pre><code class=\"kotlin\">@get:Rule val composeTestRule = createEmptyComposeRule()<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c Kakao \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Compose \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0438\u043d\u0438-Page Object-\u044b \u0434\u043b\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0430\u0448\u0438\u0445 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0432\u044c\u044e\u0448\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c. \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e: \u043f\u0438\u0448\u0435\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 Page Object \u0434\u043b\u044f \u0431\u0430\u043d\u043d\u0435\u0440\u0430 \u0438\u043b\u0438 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438, \u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e Page Object-\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">class ComposeBannerKNode(     semanticsProvider: SemanticsNodeInteractionsProvider,     nodeMatcher: NodeMatcher = NodeMatcher(         matcher = SemanticsMatcher(             description = \"Empty matcher\",             matcher = { true }         )     ), ) : BaseNode&lt;ComposeBannerKNode>(semanticsProvider, nodeMatcher) {      private val title: KNode = child {         hasTestTag(ComposeTestTags.banner.title)     }      private val message: KNode = child {         hasTestTag(ComposeTestTags.banner.message)     }      private val primaryButton: KNode = child {         hasTestTag(ComposeTestTags.banner.primaryButton)     }      private val secondaryButton: KNode = child {         hasTestTag(ComposeTestTags.banner.secondaryButton)     }  }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c \u0432 Jetpack Compose \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\/testing\">Semantics.testTag<\/a>. \u042d\u0442\u043e \u0442\u0435 \u0436\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0432\u0438\u0434\u0436\u0435\u0442\u044b, \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0410 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/stackoverflow.com\/questions\/68662342\/jetpack-compose-testing-assert-specific-image-is-set\">\u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/a>.\u00a0<\/p>\n<p>\u0423\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 Jetpack Compose \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0447\u0442\u043e \u0437\u0430\u0441\u0435\u0442\u0438\u043b\u0430\u0441\u044c, \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043d\u043e\u0434\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439. \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u0410 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0449\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0435\u0441\u0435\u0440\u0447\u0430 \u043c\u044b \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <a href=\"https:\/\/%D0%95%D1%89%D0%B5%20%D0%B2%20%D1%80%D0%B0%D0%BC%D0%BA%D0%B0%D1%85%20%D1%80%D0%B5%D1%81%D0%B5%D1%80%D1%87%D0%B0%20%D0%BC%D1%8B%20%D0%BF%D1%80%D0%BE%D0%B1%D0%BE%D0%B2%D0%B0%D0%BB%D0%B8%20%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C%20%D1%8E%D0%BD%D0%B8%D1%82-%D1%82%D0%B5%D1%81%D1%82%D1%8B%20%D0%BD%D0%B0%20%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D1%8B.%20%D0%95%D1%81%D0%BB%D0%B8%20%D0%B2%D1%8B%20%D1%83%D0%B6%D0%B5%20%D0%BF%D0%B8%D1%81%D0%B0%D0%BB%D0%B8%20UI-%D1%82%D0%B5%D1%81%D1%82%D1%8B%20%D0%BD%D0%B0%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D1%83%D0%B7%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B5%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D1%8B,%20%D0%B2%D1%8B%20%D0%B7%D0%BD%D0%B0%D0%B5%D1%82%D0%B5,%20%D1%87%D1%82%D0%BE%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C%20%D0%B8%20%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5,%20%D0%BC%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%B8%D0%B5%20unit-%D1%82%D0%B5%D1%81%D1%82%D1%8B%20%D0%BD%D0%B0%20%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D1%8B,%20%D0%B0%20%D0%B7%D0%B0%D1%82%D0%B5%D0%BC%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%D1%82%D1%8C%20%D0%B8%D1%85%20%D0%BD%D0%B0%20JVM.%20%D0%AD%D1%82%D0%BE%20%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%20%D0%BF%D1%80%D0%B8%D0%B3%D0%BE%D0%B4%D0%B8%D1%82%D1%8C%D1%81%D1%8F,%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%B2%D1%8B%20%D1%80%D0%B5%D1%88%D0%B8%D1%82%D0%B5%20%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C%20%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D1%83%D1%8E%20%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%83%D1%8E%20%D0%B2%D1%8C%D1%8E%D1%88%D0%BA%D1%83,%20%D0%B2%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B9%20%D0%BF%D1%80%D0%BE%D0%B1%D1%80%D0%B0%D1%81%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%B0%D1%8F%20%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C.%20%D0%A2%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B2%20%D1%80%D0%B0%D0%BC%D0%BA%D0%B0%D1%85%20unit-%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%81%D1%8F%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C,%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%20%D0%BB%D0%B8%20%D1%81%D0%B5%D1%82%D1%8F%D1%82%D1%81%D1%8F%20%D1%82%D0%B5%20%D0%B8%D0%BB%D0%B8%20%D0%B8%D0%BD%D1%8B%D0%B5%20%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0.\u00a0%20%20%D0%9A%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%BC%D1%8B%20%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%B0%D0%BB%D0%B8%D1%81%D1%8C%20%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B9%20unit-%D1%82%D0%B5%D1%81%D1%82,%20%D1%83%20%D0%BD%D0%B0%D1%81%20%D0%B2%D1%81%D1%91%20%D0%BE%D1%87%D0%B5%D0%BD%D1%8C%20%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%BE%20%D0%B7%D0%B0%D0%B2%D0%BE%D0%B4%D0%B8%D0%BB%D0%BE%D1%81%D1%8C.%20%D0%9D%D0%B0%D0%BC%20%D0%BF%D1%80%D0%B8%D1%85%D0%BE%D0%B4%D0%B8%D0%BB%D0%BE%D1%81%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D1%8C%20%D0%BD%D0%B5%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%BD%D1%8B%D0%B5%20%D1%85%D0%B0%D0%BA%D0%B8%20%D1%81%20%D0%B3%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%BC,%20%D1%83%D1%87%D0%B8%D1%82%D1%8B%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BD%D0%B5%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%BD%D1%8B%D1%85%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA,%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%82%D1%8C%20%D0%BA%D1%83%D1%87%D1%83%20%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA.%20%D0%92%20%D0%BE%D0%B1%D1%89%D0%B5%D0%BC,%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%8D%D1%82%D0%B8%D1%85%20%D1%81%D1%82%D1%80%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%BC%D1%8B%20%D0%BF%D1%80%D0%B8%D1%88%D0%BB%D0%B8%20%D0%BA%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D1%83,%20%D1%87%D1%82%D0%BE%20%D0%BD%D0%B0%20%D1%81%D0%B0%D0%BC%D0%BE%D0%BC%20%D0%B4%D0%B5%D0%BB%D0%B5%20%D0%BE%D0%BD%D0%BE%20%D0%BD%D0%B0%D0%BC%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B4%D0%BE,%20%D0%BF%D0%BE%D1%82%D0%BE%D0%BC%D1%83%20%D1%87%D1%82%D0%BE%20%D0%BD%D0%B0%D1%88%D0%B8%20UI-%D1%82%D0%B5%D1%81%D1%82%D1%8B%20%D0%B4%D0%B5%D0%BB%D0%B0%D1%8E%D1%82%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%20%D1%82%D0%BE%20%D0%B6%D0%B5%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B5.%20%D0%90%20%D0%B8%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE:%20%D0%B1%D0%B5%D1%80%D1%83%D1%82%20%D0%B8%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D1%8F%D1%8E%D1%82%20%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9%20%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%20%D0%BD%D0%B0%20%D0%B5%D0%B3%D0%BE%20%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B5%20%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD%D1%83,%20%D0%BD%D0%B0%20%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B%20etc.\">unit-\u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Kaspresso \u0438 Robolectric. \u0422\u0430\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u0432\u044c\u044e\u0448\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c. \u0422\u043e\u0433\u0434\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 unit-\u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u0441\u0435\u0442\u044f\u0442\u0441\u044f \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430.\u00a0<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 unit-\u0442\u0435\u0441\u0442, \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u0437\u0430\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c. \u041d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0445\u0430\u043a\u0438 \u0441 Gradle-\u043e\u043c, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u0439 \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0448\u0438 UI-\u0442\u0435\u0441\u0442\u044b \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. <\/p>\n<\/div>\n<\/details>\n<h3>\u041a\u0430\u043a \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 Compose?<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u044d\u043a\u0440\u0430\u043d \u043d\u0430 Jetpack Compose, \u043f\u043e\u0440\u0435\u0441\u0435\u0440\u0447\u0438\u043b\u0438 UI-\u0442\u0435\u0441\u0442\u044b, \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0434\u0435\u043c\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0431\u044b\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c. \u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 Jetpack Compose. \u041d\u043e \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f?..<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e.\u00a0<\/p>\n<p>\u041f\u0435\u0440\u0432\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c <strong>\u201c\u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u044f\u201d<\/strong> \u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435: \u201c\u0420\u0435\u0431\u044f\u0442\u0430, \u0441 \u0437\u0430\u0432\u0442\u0440\u0430\u0448\u043d\u0435\u0433\u043e \u0434\u043d\u044f \u043c\u044b \u0432\u0441\u0435 \u043f\u0438\u0448\u0435\u043c \u043d\u0430 Jetpack Compose\u201d. \u0414\u0430, \u043d\u0435 \u0443 \u0432\u0441\u0435\u0445 \u0435\u0441\u0442\u044c \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439, \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u043d\u0435\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u0430\u0442\u043e \u0432\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u043e\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u043c \u0438 \u0432\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u042d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0443\u0442\u044c, \u043d\u043e \u0436\u0435\u0441\u0442\u043e\u043a\u0438\u0439, \u043d\u0435\u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439. \u0415\u0441\u043b\u0438 \u0437\u0430\u0432\u0442\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u043b\u0438\u0437 \u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u0440\u043e\u0447\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.\u00a0<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u2014 <strong>\u201c\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u201d<\/strong>. \u0412\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c: \u201c\u041a\u043e\u043b\u043b\u0435\u0433\u0438, \u043f\u043e\u043a\u0430 \u043f\u0438\u0448\u0438\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 XML, \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438. \u0410 \u043c\u044b \u043f\u043e\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0440\u0435\u0448\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043c\u0430\u0441\u0441\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u043e, \u043c\u044b \u0432\u0441\u0435\u0445 \u043f\u043e\u0437\u043e\u0432\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u043e\u0434 \u0432\u0430\u0441\u201d.<\/p>\n<p>\u0418 \u0442\u0440\u0435\u0442\u044c\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u2014 \u044d\u0442\u043e \u043d\u0435\u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f, \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c <strong>\u201c\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u201d<\/strong> (EAP \u2014 early access program). \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0435\u0448\u0430\u0435\u0442\u0435 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c (\u043d\u043e \u043d\u0435 \u0432\u0441\u0435), \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u043e\u0442\u043e\u0432\u0430 \u0441\u0442\u0440\u0430\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438 \u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0438\u0445 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u0445 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043f\u0440\u043e\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0414\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0440 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0441\u0438\u0434\u0435\u0442\u044c \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0437\u0430\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c Compose, \u0431\u0443\u0434\u0443\u0442 \u0443\u0436\u0435 <strong>\u0434\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u0438\u043c \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c.<\/p>\n<p>EAP \u2014 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0443\u0442\u044c, \u0447\u0435\u043c \u201c\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u201d, \u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u0447\u0435\u043c \u201c\u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u044f\u201d. \u0422\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438 \u043e\u0442 \u201c\u0440\u0435\u0444\u043e\u0440\u043c\u044b\u201d \u043a \u201cearly access program\u201d. \u0412\u044b\u0434\u0435\u043b\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0448\u0438\u0448\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u043f\u0440\u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0444\u0435\u043b\u044f, \u0431\u0443\u0434\u0435\u043c \u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u0430 \u043d\u0430\u0448\u0430 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 production-\u044d\u043a\u0440\u0430\u043d\u0443. \u0418 \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u043e\u0442\u043b\u0438\u0447\u043d\u043e, \u0442\u043e \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 Jetpack Compose.\u00a0<\/p>\n<h3>\u0418 \u043a\u0430\u043a \u0443\u0441\u043f\u0435\u0445\u0438?<\/h3>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u0430\u0440\u0442\u0430 \u043c\u044b \u0431\u044b\u043b\u0438 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u044b \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041c\u044b \u0437\u0430\u0432\u0435\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u0441\u043a\u0443 \u0432 Miro, \u0433\u0434\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438 \u043d\u0430\u043a\u043b\u0435\u0438\u043b\u0438 \u043a\u0443\u0447\u0443 \u0436\u0435\u043b\u0442\u044b\u0445 \u0441\u0442\u0438\u043a\u0435\u0440\u043e\u0432, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044f \u0435\u0449\u0451 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u043c\u0435\u0447\u0430\u043b\u0438 \u0437\u0435\u043b\u0451\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e\u0441\u043a\u0438 \u0432 \u043c\u0430\u0440\u0442\u0435<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/301\/79f\/f2a\/30179ff2a5cfb9130cdb56a1eb42ceab.png\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/301\/79f\/f2a\/30179ff2a5cfb9130cdb56a1eb42ceab.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0442\u0438\u043a\u0435\u0440\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e &#171;\u0437\u0435\u043b\u0435\u043d\u0435\u043b\u0438&#187;, \u044d\u0442\u043e \u0433\u0440\u0435\u043b\u043e \u0434\u0443\u0448\u0443. <\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438, \u0447\u0442\u043e Jetpack Compose \u2014 \u044d\u0442\u043e \u043c\u043e\u043b\u043e\u0434\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442. \u041d\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0442\u043e\u0433\u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e XML-\u0444\u043b\u0430\u0436\u043e\u0447\u043a\u0430 <a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/TextView#attr_android:includeFontPadding\">includeFontPadding<\/a>. <\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043d\u0443\u0436\u0435\u043d?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u0440\u0438\u0441\u0443\u044e\u0442 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u0432 Figma, \u043e\u043d\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0442\u0435\u043a\u0441\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0412 Android \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u041d\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043b\u0430\u0439\u0444\u0445\u0430\u043a \u0441 <a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/TextView#attr_android:includeFontPadding\">includeFontPadding<\/a> \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/TextView#attr_android:firstBaselineToTopHeight\">firstBaselineToTopHeight<\/a> \u0438 <a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/TextView#attr_android:lastBaselineToBottomHeight\">lastBaselineToBottomHeight<\/a>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c pixel perfect \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Figma.\u00a0<\/p>\n<\/div>\n<\/details>\n<p>\u0412 Compose \u044d\u0442\u043e\u0433\u043e \u0444\u043b\u0430\u0436\u043e\u0447\u043a\u0430 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u044d\u043a\u0440\u0430\u043d\u044b &#171;\u041e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438&#187; \u043d\u0430 XML \u0438 Compose, \u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0447\u0442\u043e Compose-\u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 XML. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u043d\u0430 Compose-\u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043b\u0435\u0433\u043a\u0430 \u0443\u0435\u0445\u0430\u043b\u0438 \u0432\u043d\u0438\u0437:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8fb\/d20\/bc9\/8fbd20bc9617543a6c2d1f5c649bec38.png\" width=\"270\" height=\"561\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8fb\/d20\/bc9\/8fbd20bc9617543a6c2d1f5c649bec38.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0443\u0448\u0430 \u043f\u0435\u0440\u0444\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0441\u0442\u0430 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0433\u043e\u0434\u0443\u0435\u0442 (\u256f \u00b0 \u25a1 \u00b0) \u256f (\u253b\u2501\u253b)  <\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0435 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u0441\u043b\u0435\u0433\u043a\u0430 \u0443\u0435\u0445\u0430\u043b\u0438 \u0432\u043d\u0438\u0437, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u044b (pagging-\u0438), \u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0445 \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c. \u0415\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 workaround-\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438: <\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 Compose-\u0432\u0451\u0440\u0441\u0442\u043a\u0438 AndroidView, \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c XML-\u043d\u0443\u044e TextView, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/issuetracker.google.com\/issues\/171394808#comment32\">\u041f\u043e\u0434\u0445\u0430\u0447\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0448\u0440\u0438\u0444\u0442\u043e\u0432<\/a>, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c padding-\u0438 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 Modifier-\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 Compose-\u0430 1.2.0, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/issuetracker.google.com\/issues\/171394808\">\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0449\u0435 \u043d\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Bottom Sheet-\u0430\u043c\u0438. \u0412 Material-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Jetpack Compose \u0435\u0441\u0442\u044c <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/material\/ModalBottomSheetState\">\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Bottom Sheet-\u0430\u043c\u0438<\/a>, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0430\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Bottom Sheet-\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0438\u0430\u043b\u043e\u0433\u0430\u043c\u0438. \u041f\u043b\u044e\u0441 \u0435\u0449\u0435 \u0442\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0431\u044b\u043b \u043a\u043e\u0440\u043d\u0435\u043c \u0432\u0430\u0448\u0435\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u043e.\u00a0\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0438\u0441\u0430\u0442\u044c Bottom Sheet-\u044b \u043d\u0430 Compose, \u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 BottomSheetDialogFragment-\u044b, \u0441 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439, \u0447\u0442\u043e \u0432\u0451\u0440\u0441\u0442\u043a\u0443 \u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0430 Compose-\u0435. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 CollapsingToolbar. \u041d\u0430\u0448\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0442\u0443\u043b\u0431\u0430\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f NavBar \u041e\u043d, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u044f\u0447\u0435\u0439\u043a\u0430\u043c, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439, \u043f\u0440\u0430\u0432\u043e\u0439, \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0438 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0435\u0439. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e?<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4bd\/1d4\/410\/4bd1d4410327ca4432fad873119072e1.png\" width=\"4526\" height=\"2684\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4bd\/1d4\/410\/4bd1d4410327ca4432fad873119072e1.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Banner-\u0430\u043c\u0438, \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438, \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u2014 \u0437\u0434\u0435\u0441\u044c \u043a\u0443\u0447\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. <\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u0434\u0443\u043c\u0430\u043b\u0438, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u0430\u043a \u0438 \u0441 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, NavBar \u0438\u043d\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u043a\u0430\u043a CollapsigToolbar. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e, \u0443 \u043d\u0430\u0441 \u0441\u0445\u043e\u0434\u0443 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e API. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b <a href=\"https:\/\/t.me\/hh_tech\/1743\">\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/a><\/p>\n<p>\u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, Jetpack Compose \u2014 \u043c\u043e\u043b\u043e\u0434\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0442\u044c. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0435\u0449\u0438 \u043a\u0430\u043a <a href=\"https:\/\/developer.android.com\/reference\/android\/text\/util\/Linkify\">Linkify<\/a>. \u042d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432\u0430\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u0432 \u0447\u0430\u0442\u0438\u043a\u0435 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0441\u044b\u043b\u043a\u0430, \u0430 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043d\u0435\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u042d\u0442\u043e\u0439 \u0448\u0442\u0443\u043a\u0438 Compose \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438. \u042d\u0442\u043e <a href=\"https:\/\/stackoverflow.com\/questions\/66130513\/linkify-with-compose-text\">\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e<\/a>, \u043d\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e.\u00a0<\/p>\n<h3>\u041f\u043e\u0434\u0432\u0435\u0434\u0451\u043c \u0438\u0442\u043e\u0433\u0438<\/h3>\n<p>\u041c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c Jetpack Compose. <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u044d\u043a\u0440\u0430\u043d \u043d\u0430 Jetpack Compose, \u043e\u0446\u0435\u043d\u0438\u0442\u0435 \u0440\u0438\u0441\u043a\u0438, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u043c \u0438 Compose-\u043e\u0432\u0441\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c. \u0412\u0441\u0435 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0431\u0440\u043e\u0441\u0430\u0442\u044c\u0441\u044f \u0432 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u043e\u043c\u0443\u0442 \u044d\u0442\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438.\u00a0<\/p>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u2014 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 UDF-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e\u0442 \u0436\u0435 Presenter \u0438\u043b\u0438 \u0436\u0435 ViewModel-\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0434\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u044b\u0439 UI-\u0441\u0442\u0435\u0439\u0442 \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440 \u0432 \u0432\u0430\u0448 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u0422\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c XML-\u043a\u043e\u0434 \u043f\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0443 \u043d\u0430 \u0432\u0430\u0448\u0443 Compose-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435.\u00a0 <\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/hh\/blog\/679448\/\"> https:\/\/habr.com\/ru\/company\/hh\/blog\/679448\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435: \u0442\u0435\u043f\u043b\u044b\u0439 \u043e\u0441\u0435\u043d\u043d\u0438\u0439 \u0432\u0435\u0447\u0435\u0440, \u043d\u0430 \u0441\u0442\u043e\u043b\u0435 \u0447\u0430\u0448\u0435\u0447\u043a\u0430 \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u043a\u0443\u0441\u043d\u043e\u0433\u043e, \u0437\u0430 \u043e\u043a\u043d\u043e\u043c \u043f\u043e\u0440\u0445\u0430\u044e\u0442 \u043f\u043e\u0436\u0435\u043b\u0442\u0435\u0432\u0448\u0438\u0435 \u043b\u0438\u0441\u0442\u044c\u044f \u0438 \u0442\u043e\u043d\u043a\u043e \u043d\u0430\u0441\u0432\u0438\u0441\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0442\u0435\u0440. \u041d\u043e \u043d\u0430 \u0434\u0443\u0448\u0435 \u0441\u043a\u0440\u0435\u0431\u0443\u0442\u0441\u044f \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u043c\u044b\u0448\u0438. \u0418 \u0432\u0430\u043c \u0442\u043e\u0447\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u044d\u0442\u0438 \u043c\u044b\u0448\u0438 \u0440\u0430\u0441\u0442\u0443\u0442: \u0435\u0449\u0435 \u043b\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 Jetpack Compose, \u0430 \u0432\u044b \u0442\u0430\u043a\u0438 \u043d\u0435 \u0437\u0430\u0442\u0430\u0449\u0438\u043b\u0438 \u0435\u0433\u043e \u0432 \u0432\u0430\u0448\u0438 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432 \u0432\u0430\u0448\u0443 \u0441\u0432\u0435\u0442\u043b\u0443\u044e \u0433\u043e\u043b\u043e\u0432\u0443 \u0437\u0430\u0431\u0440\u0435\u0434\u0430\u0435\u0442 \u0448\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c: \u201c\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0434\u0430\u043a\u043e\u0435, \u0432\u0435\u043b\u0438\u043a\u043e\u0435 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0430\u0445\u043d\u0443\u043b\u0438 \u0432 \u0432\u043e\u0441\u0445\u0438\u0449\u0435\u043d\u0438\u0438 \u0438 \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a?\u201d \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0438\u0445 \u0438\u0434\u0435\u0439 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439: \u043b\u0438\u0431\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0447\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435, \u043b\u0438\u0431\u043e \u0432\u0441\u0451 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0436\u0430\u0441\u043d\u044b\u043c. \u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443 \u043d\u0430\u0441, \u044f \u0432\u0430\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443.\u00a0<\/p>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0421\u0442\u0440\u0435\u043b\u044c\u0447\u0435\u043d\u043a\u043e, \u044f Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 <a href=\"http:\/\/hh.ru\">hh.ru<\/a>. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0432\u0435\u0434\u0430\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f Jetpack Compose \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0430\u043c\u0431\u0438\u0446\u0438\u043e\u0437\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443: \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\">Compose<\/a>. \u041f\u0440\u0438\u0447\u0435\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"http:\/\/hh.ru\">hh.ru<\/a>. \u0418 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0437\u0434\u0435\u0441\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f.<\/p>\n<p>\u0410 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u044b\u0435 playground-\u044b \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043e\u043d\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0430\u0433\u0430\u0436 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e.\u00a0<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0442\u043e\u043b\u044c\u043a\u043e-\u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442\u0435 \u0442\u043e\u0442 \u0436\u0435 Jetpack Compose \u0432 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442, \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u0441 \u0433\u0440\u0435\u0434\u043b\u043e\u043c (Gradle). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u0438\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f Jetpack Compose.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f Android SDK. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f Jetpack Compose 1.1 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f minCompileSdk 31, \u0430 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f Kotlin. \u0418 \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Kotlin \u2014 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u0430\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043b\u044e\u0441 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0435\u0449\u0435 \u0438 \u0441 \u0441\u0430\u043c\u0438\u043c Jetpack Compose \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c Jetpack Compose.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u0410 \u043f\u0440\u0438\u0432\u0435\u0434\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 View, \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 <a href=\"https:\/\/developer.android.com\/jetpack\/compose\/accessibility\">accessibility \u0432 Compose<\/a>. \u041d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b <a href=\"https:\/\/support.google.com\/accessibility\/android\/answer\/6283677?hl=ru\">Talkback<\/a> (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f accessibility, \u0434\u043b\u044f \u043d\u0435\u0437\u0440\u044f\u0447\u0438\u0445 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0449\u0435\u043b\u043a\u0430\u044e\u0442 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u044d\u043a\u0440\u0430\u043d\u0430, \u0438 \u044d\u0442\u043e\u0442 talkback \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0438\u043c \u043d\u0430 \u0447\u0442\u043e \u043d\u0430\u0436\u0430\u043b\u0438) \u0438&#8230; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u0440\u0430\u0448\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435. \u042f \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u043c\u043e\u0433 \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c. <\/p>\n<p>\u0410 \u0434\u0435\u043b\u043e \u0431\u044b\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 AndroidX \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0431\u044b\u043b\u0438 \u043d\u0438\u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Jetpack Compose. \u041d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 Jetpack Compose \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0432\u0441\u0435 \u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0443 \u0432\u0430\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435, \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043b\u0438 \u0432\u0430\u043c \u0432\u0435\u0440\u0441\u0438\u0438 Gradle, \u0432\u0441\u0435 \u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Kotlin-\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.\u00a0<\/p>\n<\/div>\n<\/details>\n<p>\u0423 \u043d\u0430\u0441 \u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u0438 Gradle, Kotlin \u0438 Android. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 convention-\u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c Jetpack Compose \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0430 \u043d\u0435 \u043d\u0430 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0440\u0430\u0437\u0443. \u0422\u0430\u043a \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438, \u0438 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 convention-\u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Compose-\u0430 \u043a \u043c\u043e\u0434\u0443\u043b\u044e<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">import com.android.build.gradle.BaseExtension  configure&lt;BaseExtension> {     @Suppress(\"UnstableApiUsage\")     with(buildFeatures) {         compose = true     }      @Suppress(\"UnstableApiUsage\")     composeOptions {         kotlinCompilerExtensionVersion = \"1.1.1     } }  dependencies {     add(\"implementation\", \"androidx.compose.runtime:runtime:1.1.1\") } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u0414\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432 hh.ru<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e, \u0442\u043e \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u043c\u0430\u043a\u0435\u0442\u043e\u0432. \u0421\u044e\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u043e\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0446\u0432\u0435\u0442\u0430, \u0448\u0440\u0438\u0444\u0442\u044b, \u043e\u0442\u0441\u0442\u0443\u043f\u044b, \u0442\u0435\u043d\u0438, \u0442\u0430\u043a \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441 \u043a\u0443\u0447\u0435\u0439 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432. \u0422\u0443\u0434\u0435 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0432\u0441\u044f\u043a\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0430\u0448\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u043b\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0430\u0442\u043e\u043c\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0432 Figma \u0441 \u0446\u0432\u0435\u0442\u0430\u043c\u0438, \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438, \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><figcaption>\u0410\u0442\u043e\u043c\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/figcaption><\/figure>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438 \u043e\u043d\u0438 \u0438 \u043f\u0440\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0430\u043d\u043d\u0435\u0440\u0430\u043c\u0438:<\/p>\n<figure class=\"full-width\"><figcaption>\u0423 \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u0435\u0441\u0442\u044c 4 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c \u0438 \u043f\u043e 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432<\/figcaption><\/figure>\n<p>\u0418\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043d\u043e\u043f\u043a\u0438:<\/p>\n<figure class=\"full-width\">__&lt;&#187; title=&#187;\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043d\u043e\u043f\u043e\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435: 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (Title \/ Title Subtitle \/ etc) \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 12 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 84 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 >__&lt;&#187; width=&#187;1920&#8243; height=&#187;1080&#8243; data-src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d50\/938\/d79\/d50938d790f574352f0120ba84814eb4.png&#187;\/><figcaption>\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043d\u043e\u043f\u043e\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435: 7 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (Title \/ Title Subtitle \/ etc) \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 12 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 84 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 >__&lt;<\/figcaption><\/figure>\n<p>\u041f\u043e\u0447\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432.<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432 <a href=\"http:\/\/hh.ru\">hh.ru<\/a> \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u0441\u0438\u0441\u0442\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438. \u041e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u0430\u044f, \u0438 \u043c\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0438 \u0435\u0451 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 xml-\u0432\u044c\u044e\u0448\u043a\u0430\u0445. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u0436\u0438\u0440\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u0438\u0442\u0430\u044e\u0442: \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e xml-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0442\u044c\u043c\u0430 Kotlin-\u043e\u0432\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u044d\u0442\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u043e\u0434\u0443\u043b\u044c \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 XML<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>\u041c\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 XML<\/figcaption><\/figure>\n<p>\u042f \u043f\u043e\u043c\u043d\u044e \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u0440\u043e\u0445\u043e\u0439, \u043d\u043e \u0437\u0430 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u043f\u043d\u0443\u044e \u043e\u0441\u043e\u0431\u044c \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. <\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430 Jetpack Compose. \u041e\u0434\u0438\u043d \u0434\u043e\u0431\u043b\u0435\u0441\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c design system compose, \u043d\u0430\u0447\u0430\u043b \u043d\u0430\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0430\u0442\u043e\u043c\u044b \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u0440\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0443 \u0437\u0430\u0442\u0430\u0449\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043c \u0440\u0430\u0431\u043e\u0442 \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u043d\u0430\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0412\u0435\u0440\u043d\u0435\u0435, \u0437\u0430\u0434\u0430\u0447\u0430-\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u0430\u044f, \u043d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b, Jetpack Compose \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f, \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442 \u0441\u0442\u043e \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0411\u044b\u043b\u043e \u0438 \u0432\u043f\u0440\u0430\u0432\u0434\u0443 \u0433\u0440\u0443\u0441\u0442\u043d\u043e<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>\u042d\u0442\u043e \u0431\u044b\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0434\u0435\u043b\u044c &#171;\u0432\u043d\u0435\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0445&#187; \u0437\u0430\u043d\u044f\u0442\u0438\u0439<\/figcaption><\/figure>\n<p>\u041a\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e, \u0430 \u043d\u0430\u0434 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0448\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u0438\u0439 Button (\u0445\u043e\u0442\u044f \u0431\u044b \u0438\u0437-\u0437\u0430 \u043d\u0430\u0448\u0438\u0445 \u0441\u0442\u0438\u043b\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043c\u0430\u0442\u0447\u0430\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/compose\/material\/package-summary#MaterialTheme(androidx.compose.material.Colors,androidx.compose.material.Typography,androidx.compose.material.Shapes,kotlin.Function0)\">MaterialTheme<\/a>, \u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432), \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441 \u043d\u0443\u043b\u044f \u043d\u0430 Surface-\u0435. Banner-\u044b \u0442\u043e\u0436\u0435 \u043e\u0442\u043d\u044f\u043b\u0438 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u0432\u0441\u0451 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0433 \u0440\u0435\u0448\u0438\u0442\u044c, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 Constraint-\u0435 (\u043e\u043d \u0432 Compose-\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0433\u043a\u0430 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e), \u0438\u043b\u0438 \u0436\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 Column-\u0430\u0445 \u0438 Row.  <\/p>\n<\/div>\n<\/details>\n<h3>\u0421\u043c\u0435\u043d\u0430 \u0444\u043e\u043a\u0443\u0441\u0430<\/h3>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0434\u043e\u0431\u043b\u0435\u0441\u0442\u043d\u044b\u0439, \u043d\u043e \u0443\u0434\u0440\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u0430\u043a\u0438\u043c \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u0448\u0435\u043b \u043a \u0442\u0438\u043c\u043b\u0438\u0434\u0443 \u0437\u0430 \u0441\u043e\u0432\u0435\u0442\u043e\u043c. \u0418 \u0442\u043e\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 Jetpack Compose \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u044d\u043a\u0440\u0430\u043d\u0447\u0438\u043a. \u0422\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u043d\u0430 Jetpack Compose \u0438 \u043f\u043e\u0439\u043c\u0435\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430.\u00a0<\/p>\n<p>\u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0441\u0442\u043e\u043f\u0443\u0434\u043e\u0432\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c:<\/p>\n<ul>\n<li>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u0441\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442. \u0410 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0449\u0435 \u0438 \u0434\u0435\u043c\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0441\u0432\u043e\u0451 \u043c\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442 \u0438 \u0434\u0430\u043b\u0430 \u0444\u0438\u0434\u0431\u044d\u043a.<\/p>\n<h3>\u041f\u0435\u0440\u0432\u0430\u044f \u0436\u0435\u0440\u0442\u0432\u0430 \u0434\u043b\u044f Jetpack Compose\u00a0<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0436\u0435\u0440\u0442\u0432\u044b \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u044d\u043a\u0440\u0430\u043d \u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0439 \u0442\u0430\u043c \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u043a\u0440\u0430\u043d &#171;\u041e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438&#187;?<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0432\u0435\u0440\u0445\u044a\u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u044d\u043a\u0440\u0430\u043d \u0432\u0441\u0451 \u0435\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b: \u0446\u0432\u0435\u0442\u0430, \u0448\u0440\u0438\u0444\u0442\u044b, \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0432\u044c\u044e\u0448\u043a\u0438, \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043b\u044f RecyclerView, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c.\u00a0<\/p>\n<p>\u0418 \u0432-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u044d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043d\u0430 \u043d\u0435\u0433\u043e \u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442. \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441 \u043c\u043d\u043e\u0433\u043e\u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u0438 \u043d\u0430\u0447\u043d\u0443\u0442\u0441\u044f \u043a\u0440\u0430\u0448\u0438, \u0442\u043e \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0432\u0430\u043b\u0438\u0442 \u0437\u0430 \u0441\u043e\u0442\u043d\u0438 \u0442\u044b\u0441\u044f\u0447. \u0410 \u044d\u0442\u043e, \u043a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u0421 \u0436\u0435\u0440\u0442\u0432\u043e\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c, \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c. \u041f\u0435\u0440\u0435\u0432\u0435\u043b\u0438, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u043b\u0438 \u0434\u0432\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u0447\u043a\u0438 \u2014 \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0439\u0434\u0438 \u043f\u044f\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u0439<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c XML (\u0441\u043b\u0435\u0432\u0430) \u0438 Compose (\u0441\u043f\u0440\u0430\u0432\u0430)<\/figcaption><\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0442\u043e\u0447\u043d\u043e \u0435\u0441\u0442\u044c, \u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u044f\u0442\u0438 =) <\/p>\n<\/div>\n<\/details>\n<h3>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u043a\u0440\u0430\u043d\u0430 &#171;\u041e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438&#187;<\/h3>\n<p>\u041d\u043e \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438? \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0441\u0445\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, \u043e\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430: \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0435 onCreateViev \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044c\u044e\u0448\u043a\u0438 \u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0434\u043b\u044f\u00a0 RecyclerView, \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0430 ViewModel, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 UiState \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0435\u0435 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u0410 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0431\u0440\u0430\u043b \u044d\u0442\u043e\u0442 State \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u0435\u0433\u043e \u0432 RecyclerView \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u043d\u0430 RecyclerView.<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e ViewModel. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0435, \u0434\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043d\u0430 Compose, \u0431\u044b\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 UiConverter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u043b \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f RecyclerView. <\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 XML-\u043e\u0439 ViewModel<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">internal class AboutViewModel @Inject constructor(     private val deps: AboutDeps,     private val uiConverter: AboutUiConverter, ) : ManualStateViewModel&lt;Nothing, AboutUiState>() {      ...      override fun onFirstAttach() {         super.onFirstAttach()         setState(             state = uiConverter.toUiState(               deps.getAboutScreenModel(), listeners             )         )     }  }<\/code><\/pre>\n<p>ManualStateViewModel \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441 <\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-336283","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=336283"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336283\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}