рдЕрдВрдд рдореЗрдВ, рд╡рд╣ рдХреНрд╖рдг рдЖ рдЧрдпрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдирдП рдШреЛрд╖рдгрд╛рддреНрдордХ рдпреВрдЖрдИ рдврд╛рдВрдЪреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЬреЗрдЯрдкреИрдХ рдХрдореНрдкреЛрдЬ рдЕрдм Google рдХреЗ рдорд╛рд╡реЗрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдкрд╣рд▓реЗ рджреЗрд╡ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕ рдЦрдмрд░ рдХреЗ рд╕рд╛рде, рдореЗрд░рд╛ рд╕реЛрдорд╡рд╛рд░ рд╕реБрдмрд╣ рд╢реБрд░реВ рд╣реБрдЖред рдФрд░ рддреБрд░рдВрдд рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА рдХрд┐ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреНрдпрд╛ рдерд╛ рдЬреЛ рд╡реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛ Google Play рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрд╛рд▓рддреВ-рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рд╕реЗ рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ рдПрдХ рдкреЗрдЬ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ"ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛:
- рдирд┐рд░реНрднрд░рддрд╛ рдХрдиреЗрдХреНрд╢рди
- рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдгред
- рдкрд╣реБрдВрдЪ рдФрд░ UI рдкрд░реАрдХреНрд╖рдгред
- рд╡реНрдпреВ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХ рдФрд░ рдПрдирд╛рд▓реЙрдЧреНрд╕ред
- рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред
рдирд┐рд░реНрднрд░рддрд╛ рдХрдиреЗрдХреНрд╢рди
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ 3.5 рд╕реЗ 3.5.1 (рд╡реНрдпрд░реНрде рдореЗрдВ) рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ред рд╕рд┐рд░рд┐рд▓ рдХреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
// build.gradle ext.compose_version= '0.1.0-dev01' //build.gradle dependencies{ ... implementation "androidx.compose:compose-runtime:$compose_version" kapt "androidx.compose:compose-compiler:$compose_version" implementation "androidx.ui:ui-layout:$compose_version" implementation "androidx.ui:ui-android-text:$compose_version" implementation "androidx.ui:ui-text:$compose_version" implementation "androidx.ui:ui-material:$compose_version" }
рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдлрд╛рдпрд░рдмреЗрд╕ рдХреЗ рдЫрд┐рддрд░реЗ рд╣реБрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд╕рдм рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдХрдореНрдкреЛрдЬрд╝ рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛:
app/src/main/AndroidManifest.xml Error: uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library [androidx.ui:ui-layout:0.1.0-dev01] .../ui-layout-0.1.0-dev01/AndroidManifest.xml as the library might be using APIs not available in 16 Suggestion: use a compatible library with a minSdk of at most 16, or increase this project's minSdk version to at least 21, or use tools:overrideLibrary="androidx.ui.layout" to force usage (may lead to runtime failures)
рд╣рд╛рдВ, рдХрдореНрдкреЛрдЬ рдХреЗрд╡рд▓ рдорд┐рдиреНрд╕рдХреЙрдХ 21 (рд▓реЙрд▓реАрдкреЙрдк) рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рдерд╛ред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЙрдкрд╛рдп рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдУрдПрд╕ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдХреЛрдЯрд▓рд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд▓рдЧрд┐рди рдХреЗ рдмрдЬрд╛рдп, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣рд╛рдБ , рдкрд░рд╛рд╡рд░реНрддрди рдкрд░ рд░рдЪрдирд╛ рд▓рд┐рдЦреЗрдВред рдЗрд╕рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдЯрд▓рд┐рди рд░рд┐рдлреНрд▓реЗрдХреНрдЯ рдХреЛ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
implementation "org.jetbrains.kotlin:kotlin-reflect"
рдЦреИрд░, рдорд┐рдард╛рдИ рдХреЗ рд▓рд┐рдПред рдЗрдВрдЯ, рд▓реЙрдиреНрдЧ, рдлреНрд▓реЛрдЯ рдХреЗ рд▓рд┐рдП рдбреАрдкреА рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рд▓рд┐рдЦреЗрдВ, рдЬреЛ рдЗрдирд▓рд╛рдЗрди рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВред рдЗрд╕рд╕реЗ рдПрдХ рдирдИ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ:
Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option * https://stackoverflow.com/questions/48988778/cannot-inline-bytecode-built-with-jvm-target-1-8-into-bytecode-that-is-being-bui
рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдЯрд▓рд┐рди рдХреЗ рд▓рд┐рдП рдЬреЗрд╡реАрдПрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
android { тАж kotlinOptions { jvmTarget = "1.8" } }
рд╡рд╣ рд╕рдм рдорд╛рд▓реВрдо рд╣реЛрддрд╛ рд╣реИред рдЕрдкрдиреЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ)
рдЖрдЗрдП рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ (рд╕рд╛рдЗрд░рд┐рд▓ рдХреЗ рд▓реЗрдЦ рд╕реЗ рднреА, рд▓реЗрдХрд┐рди, рдЙрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдлреНрд░реИрдЧрдореЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдХрдореНрдкреЛрдЬрд╝ рдЬреЛрдбрд╝реЗрдВ)ред рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯ рдПрдХ рдЦрд╛рд▓реА FrameLayout рд╣реИред
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val fragmentView = inflater.inflate(R.layout.fragment_about, container, false) (fragmentView as ViewGroup).setContent { Hello("Jetpack Compose") } return fragmentView } @Composable fun Hello(name: String) = MaterialTheme { FlexColumn { inflexible {
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдореНрди рд╕реНрдХреНрд░реАрди рдирд┐рдХрд▓рддреА рд╣реИ:
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреЙрдиреНрд╕рдЯреЗрдмрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╛рдордЧреНрд░реА рдереАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рдмреИрдВрдЧрдиреА рдРрдкрдмрд╛рд░ рдорд┐рд▓рд╛ред рдареАрдХ рд╣реИ, рдФрд░, рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ, рдпрд╣ рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ:
рдЖрдЗрдП рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдгред
рдХрдореНрдкреЛрдЬрд╝реЗрдмрд▓ рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрджрд╛ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ MaterialTheme рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:
@Composable fun Hello(name: String) = MaterialTheme(colors = MaterialColors( primary = resolveColor(context, R.attr.colorPrimary, MaterialColors().primary), secondary = resolveColor(context, R.attr.colorSecondary, MaterialColors().secondary), onBackground = resolveColor(context, R.attr.textColor, MaterialColors().onBackground) )){...}
MaterialTheme рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: MaterialColors рдФрд░ MaterialTypographyред
рд░рдВрдЧреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╢реИрд▓рд┐рдпреЛрдВ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
private fun resolveColor(context: Context?, @AttrRes attrRes: Int, colorDefault: Color) = context?.let { Color(resolveThemeAttr(it, attrRes).data.toLong()) } ?: colorDefault private fun resolveThemeAttr(context: Context, @AttrRes attrRes: Int): TypedValue { val theme = context.theme val typedValue = TypedValue() theme.resolveAttribute(attrRes, typedValue, true) return typedValue }
рдЗрд╕ рд╕реНрддрд░ рдкрд░, AppBar рд╣рд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдкрд╛рда рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Text("Hello $name!", style = TextStyle(color = +themeColor { onBackground }))
рдереАрдо рдХреЛ рдпреВрдирд┐рд░реА рдкреНрд▓рд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬреЗрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рднреА рд╣рдо рдЗрд╕реЗ рджреЗрдЦреЗрдВрдЧреЗред
рдЕрдм рдирдпрд╛ рд╕реНрдХреНрд░реАрди рдереАрдо рдХреЗ рджреЛрдиреЛрдВ рд╡реЗрд░рд┐рдПрдВрдЯ рдореЗрдВ рдмрд╛рдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рдХрдореНрдкреЛрдЬрд╝ рдХреЛ рд╕реВрддреНрд░реЛрдВ рдореЗрдВ DarkTheme.kt рдлрд╝рд╛рдЗрд▓ рднреА рдорд┐рд▓реА, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдкреА рдФрд░ 10 рдкрд░ рдПрдХ рдбрд╛рд░реНрдХ рдереАрдо рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЯреНрд░рд┐рдЧрд░реНрд╕ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд╣реБрдВрдЪ рдФрд░ UI рдкрд░реАрдХреНрд╖рдгред
рдЬрдм рддрдХ рд╕реНрдХреНрд░реАрди рдирдП рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд▓реЗрдЖрдЙрдЯ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рджреЗрд╡ рдореЛрдб рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде:

рдпрд╣рд╛рдБ рд╣рдо FrameLayout рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдХреЗрд╡рд▓ AndroidComposeView рд╣реИред Accebility рдФрд░ UI рдкрд░реАрдХреНрд╖рдг рдХреЗ рдореМрдЬреВрджрд╛ рдЙрдкрдХрд░рдг рдЕрдм рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИрдВ? рд╢рд╛рдпрдж рдЙрдирдХреЗ рдмрдЬрд╛рдп рдЕрдм рдПрдХ рдирдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛрдЧрд╛: androidx.ui:ui-test
ред
рд╡реНрдпреВ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХ рдФрд░ рдПрдирд╛рд▓реЙрдЧреНрд╕ред
рдЕрдм рд╕реНрдХреНрд░реАрди рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрджрд▓реЗрдВ, Google Play рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдмрдЯрди рдФрд░ рдПрдХ рд▓реЛрдЧреЛ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рдЬреЛрдбрд╝реЗрдВред рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдХреЛрдб рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдФрд░ рдХреНрдпрд╛ рд╣реБрдЖ:
@Composable fun AboutScreen() = MaterialTheme(...) { FlexColumn { inflexible { TopAppBar<MenuItem>(title = { Text(getString(R.string.about)) }) } expanded(1F) { VerticalScroller { Column { Image() Title() MyButton() } } } } } private fun Image() { Center { Padding(16.dp) { Container( constraints = DpConstraints( minWidth = 96.dp, minHeight = 96.dp ) ) { imageFromResource(resources, R.drawable.ic_launcher) } } } } private fun Title() { Center { Padding(16.dp) { Text(getString(R.string.app_name) + " " + BuildConfig.VERSION_NAME, style = TextStyle(color = +themeColor { onBackground })) } } } private fun MyButton() { Center { Padding(16.dp) { Button(getString(R.string.about_button), onClick = { openAppInPlayStore() }) } } }
рдХрдореНрдкреЛрдЬрд╝ рд╕реНрд░реЛрддреЛрдВ рдХреА рдкрд╣рд▓реА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж рд╕реЗ рд╡рд┐рдЬреЗрдЯ рд░рдЪрдирд╛ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╣реАрдВ рдмрджрд▓реЗ рд╣реИрдВ ред
рджрд┐рд▓рдЪрд╕реНрдк рд╕реЗ:
рдЕрдм рдЪрд▓рд┐рдП рдореБрдЦреНрдп рдореМрдЬреВрджрд╛ рд╡реНрдпреВрдЧреНрд░реБрдк рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдХрдореНрдкреЛрдЬрд╝ рдореЗрдВ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
рдлреНрд░реЗрдорд▓реИрдЯ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдмрдЪреНрдЪреЗ рд╡рд┐рдЧреЗрдЯреНрд╕ рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд▓рдЧреНрдирдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: рдЧрдардмрдВрдзрди, рддреИрдирд╛рдд рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рддред
рд░реИрдЦрд┐рдХрдпрд░рд╛рдЙрдЯ рдХреЛ рджреЛ рд╡рд┐рдЬреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рддреБрд░рдВрдд рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдВрдбреНрд░реЙрдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓рдо рдФрд░ рд░реЛ: рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ред рд╡реЗ, рдмрджрд▓реЗ рдореЗрдВ, рдлреНрд▓реЗрдХреНрд╕рдХреЛрд▓реНрдпреВрдо рдФрд░ рдлреНрд▓реЗрдХреНрд╕рд░реЛ рдореЗрдВ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╕рдмрдЯреНрд░реА рдкрд░ рдЕрдирдореНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА рдПрдХ рдкрд░рдд рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВред рдЦреИрд░, FlexColumn рдФрд░ FlexRow рдЦреБрдж рдлреНрд▓реЗрдХреНрд╕ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ orientation = LayoutOrientation.Vertical
рдпрд╛ Horizontal
рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рд╣реИрдВред
FlowColumn, FlowRow рдФрд░ Flow рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдкрджрд╛рдиреБрдХреНрд░рдоред рдЙрдирдХрд╛ рдореБрдЦреНрдп рдЕрдВрддрд░: рдпрджрд┐ рд╕рд╛рдордЧреНрд░реА рдПрдХ рд╕реНрддрдВрдн рдпрд╛ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЕрдЧрд▓рд╛ рдПрдХ рдЕрдЧрд▓рд╛ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рд╡рд┐рдЬреЗрдЯ "рд╡рд╣рд╛рдВ" рдкреНрд░рд╡рд╛рд╣ рдХрд░реЗрдВрдЧреЗред рдЗрди рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджреНрджреЗрд╢реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИред
рд╕реНрдХреНрд░реЙрд▓рд╡реНрдпреВ рдкреНрд░рднрд╛рд╡ рд╡рд░реНрдЯрд┐рдХрд▓рд╕реНрдХреЙрд▓рд░ рдпрд╛ рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓рд╕реНрд░реЛрд▓рд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдХреЙрд▓рдо рдпрд╛ рд░реЛ рд░рдЦрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рджреЛрдиреЛрдВ рд╕реНрдХреНрд░реЛрд▓рд░ рдХреЗ рдЕрдВрджрд░ рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЙрддреНрддреАрд░реНрдг рд╣реЛрддрд╛ рд╣реИ isVertical = true
рдпрд╛ false
ред
ConstraintLayout рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо RelativeLayout рдПрдХ рдирдП рдЯреЗрдмрд▓ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдЖрдпрд╛ред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдирдореВрдирд╛ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: DataTableSamples.kt ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рдмрд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХрд▓ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЗрд╕рдХреА рддрддреНрдкрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЯреИрдЧ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП @Model рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ рдЬреЛ UI рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
data class DialogVisibleModel(val visible: Boolean, val dismissPushed: Boolean = false) ... @Composable fun SideBySideAlertDialogSample() { val openDialog = +state { DialogVisibleModel(true) } Button(text = "Ok", onClick = { openDialog.value = DialogVisibleModel(true) }) if (openDialog.value.visible) { AlertDialog( onCloseRequest = {
рдпрд╣ рд░рд╛рдЬреНрдп рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ @Model рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд╕реНрд╡рдпрдВ @ рдХреЙрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИред
рд╕рдВрд╡рд╛рдж рдХреА рджреГрд╢реНрдпрддрд╛ рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдореЙрдбрд▓ рдХреА рджреГрд╢реНрдп рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИред
рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рдирдИ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБ рдкрд░ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рджреЛрдиреЛрдВ рдмрдЯрди рдХреЗ рдСрдирдХреНрд▓рд┐рдХ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдЦреБрдж рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рд╕рдВрд╡рд╛рдж рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдУрдХреЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдУрдкрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕реА @ рдХрдореНтАНрдкреНтАНрдпреВрдЯрд░ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд░рд╛рдЬреНрдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:
java.lang.IllegalStateException: Composition requires an active composition context.
рд╕рдВрджрд░реНрдн onCreateView рдореЗрдВ setContent {} рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдпрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдпрд╛ рдЕрдиреНрдп рд╡рд░реНрдЧ рдореЗрдВ, рдЕрднреА рднреА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред

рдпрд╣ рдирдП Jetpack Compose рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╣рдорд╛рд░реА рд╕рдореАрдХреНрд╖рд╛ рдХрд╛ рд╕рдорд╛рдкрди рдХрд░рддрд╛ рд╣реИред рдврд╛рдВрдЪрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рд╡реНрдпреВ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдЬреЛ рд╕рднреА рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреА рдЬрдЧрд╣, рдЙрд╕рдХреЗ рдирд╛рдо рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддрд╛ рд╣реИред рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ рдХрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ ViewGroups рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ ConstraintLayout рдФрд░ RecyclineView; рдкрд░реНрдпрд╛рдкреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдирд╣реАрдВред
рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЫреЛрдЯреЗ рд▓рдбрд╝рд╛рдХреВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рднреА рдХрдВрдкреЛрдЬ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрд╡ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдореБрджрд╛рдп рд╕реЗ рд░рд╛рдЬреНрдп рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдХреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб, рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрдзрд┐рдХ рд╕рдлрд▓ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓реЗ, рддреЛ рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред