рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк
рд╕реЗ Android рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ рдФрд░ рдЕрдиреБрд╡рд╛рдж рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддреЗ рд╣реИрдВ
ред рдЙрдиреНрдирдд рдкрд╛рдареНрдпрдХреНрд░рдо ред
тАЭ
рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдЬрд╝рдорд╛рдирд╛
рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдХрдИ рдореЛрдмрд╛рдЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬреИрд╕реЗ рдХрд┐ Android, ReactNative рдФрд░ Flutterред ReactNative рд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рд╕реЗ рдореБрдЭреЗ рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд╡рдирд╛рдПрдВ рдорд┐рд▓реАрдВред рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд╡рд╛рдкрд╕реА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реБрдИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХ рдорд╣рд╛рди рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рд╡рд╛рдкрд╕, рдореБрдЭреЗ рд╡реНрдпреВ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдорд╛рди рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдШрдЯрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд░реНрдкрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЛ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рдХрдо рд╕рдорд░реНрдерд┐рдд рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рдЕрдВрддрддрдГ, рд╣рдо рдЦреБрдж рдХреЛ рдПрдХ рдРрд╕реЗ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ рдЬреЛ UX рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХреЗред
Android рдиреЗ Jetpack Compose рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рд╣реИред рдЪрд┐рддреНрд░рдг: рдЗрдорд╛рдиреБрдПрд▓ рдмрдЧрд┐рд▓рд╛рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП Jetpack Compose
рдЗрд╕рд▓рд┐рдП, Google I / O 2019 рд╕рдореНрдореЗрд▓рди рд╕реЗ
рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ ,
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рддреБрд░рдВрдд рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдХрдореНрдкреЛрдЬрд╝ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЯреВрд▓рдХрд┐рдЯ рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЛрдЯрд▓рд┐рди рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрдореНрдкреЛрдЬрд╝ рдореМрдЬреВрджрд╛ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ, рд▓рд┐рдереЛ рдпрд╛ рд╕реНрдкрдЯрд░ рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИред
рдПрдВрдбреНрд░реЙрдЗрдб рдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрд░рдЪрдирд╛ 2008 рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ, рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЬреЗрдЯрдкреИрдХ рдХрдореНрдкреЛрдЬрд╝ рдХрд╛ рд▓рдХреНрд╖реНрдп рдЖрдзреБрдирд┐рдХ рдШрдЯрдХреЛрдВ рдХреЗ рджрд░реНрд╢рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд░реВрдкрд░реЗрдЦрд╛ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ:
- рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрддрддрд╛: рдпрд╣ рдЖрдкрдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдореНрдкреЛрдЬрд╝ рдирдП рдПрдВрдбреНрд░реЙрдЗрдб рд░рд┐рд▓реАрдЬрд╝ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИред
- рдЫреЛрдЯреА рдЯреЗрдХреНрдиреЙрд▓реЙрдЬреА рд╕реНрдЯреИрдХ: рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдкрдХреЛ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рддреЗ рд╕рдордп рд╡реНрдпреВ рдпрд╛ рдлреНрд░реЗрдЧреНрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рддрддреНрд╡ рдШрдЯрдХ рд╣реИрдВ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЪреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
- рдкрд╛рд░рджрд░реНрд╢реА рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдФрд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ: рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛ рдЖрдкрдХреЛ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдгред рдХрдореНрдкреЛрдЬрд╝ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдХреМрди рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд░рд┐рдПрдХреНрдЯ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
- рдХрдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ : рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрдирд╛ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RecyclineView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд░рдЪрдирд╛ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдирд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкреГрдердХ рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореМрдЬреВрджрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╕реНрдХреНрд░реАрди рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдирд╛, рджреГрд╢реНрдп рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ, рджреЗрдЦреЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдо рдФрд░ рджреГрд╢реНрдп рдФрд░ рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ: рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб
рдЖрдЗрдП Jetpack Compose рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
class ComposeActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { CraneWrapper { MyApp() } } } @Composable fun MyApp() { MaterialTheme { Text(text = "Hello world!", style = +themeTextStyle { h3 }) } } }
onCreate
рд╡рд┐рдзрд┐ рдореЗрдВ
onCreate
рд╣рдо
setContent
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рд╕рдордЧреНрд░ рд╡рд┐рдЬреЗрдЯ рдЯреНрд░реА рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ
FrameLayout
рдореЗрдВ рд▓рдкреЗрдЯрддреА рд╣реИред
рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ
CraneWrapper
рдФрд░
CraneWrapper
рдореЗрдВ
CraneWrapper
ред
CraneWrapper
Context
,
FocusManager
рдФрд░
TextInputService
рд▓рд┐рдП рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЖрдкрдХреЗ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд░рдВрдЧ, рд╢реИрд▓реА рдФрд░ рдлрд╝реЙрдиреНрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
MaterialTheme
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо
Text
рдШрдЯрдХ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реИрд▓реА рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рда рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рд░рд╛рдЬреНрдп рдХрд╛ рдкрд░рд┐рдЪрдп
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдПрдХ рдХрдард┐рди рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдХрд╛рдЙрдВрдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред
рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Jetpack Compose рдЕрдиреНрдп рдЖрдзреБрдирд┐рдХ UI рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ Flutter рдФрд░ Reactред рдПрдХ рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рдФрд░ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдпрд╛ "рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг" рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
@Composable fun MyApp() { MaterialTheme { Counter() } } @Composable fun Counter() { val amount = +state { 0 } Column { Text(text = "Counter demo") Button(text = "Add", onClick = { amount.value++ }) Button(text = "Subtract", onClick = { amount.value-- }) Text(text = "Clicks: ${amount.value}") } }
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде "рдЬреЛрдбрд╝реЗрдВ" рдФрд░ "рдШрдЯрд╛рдирд╛" рдмрдЯрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд▓рд┐рдХ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, "рд░рд╛рд╢рд┐" рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реБрдП, рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВamount
рд░рд╛рдЬреНрдп рдХреЛ
+state { 0 }
рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдЬрд╛рджреВ рдЯреЛрдирд╛ рд╣реИ, рдореИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдореЗрд░реА рд░рд╛рдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рд╕рдордЭрддрд╛ рд╣реВрдВред
state {...}
рдПрдХ
Effect< State <
T <
code>>
рдмрдирд╛рддрд╛ рд╣реИ
Effect<
State <
T <
code>>
ред
Effect
рд╡рд░реНрдЧ рдПрдХ рдлрд╝рд░реНрдЬрд╝реА рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд░рдЪрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред
State
рд╡рд░реНрдЧ рдореЗрдВ
Model
рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдЕрд╡рд▓реЛрдХрдиреАрдп рдмрдирд╛рддрд╛ рд╣реИред + рдСрдкрд░реЗрдЯрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдСрдкрд░реЗрдЯрд░ рд╣реИ рдЬреЛ
State
рдХреЛ
Effect
рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо рд░рд╛рдЬреНрдп рдореЙрдбрд▓
рдПрдХрд▓ рдорд╛рди рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
+state {}
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо @Model рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╕реНрдЯрдо рдореЙрдбрд▓ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдХрд╛рдЙрдВрдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЫреЛрдЯреЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЛ рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ рдЗрд╕ рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@Model class CounterModel { var counter: Int = 0 var header = "Counter demo" fun add() { counter++ } fun subtract() { counter-- } }
@Model
рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ
@Model
, рдХрдВрдкреЛрдЬрд╝ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд▓рдЧрдЗрди рдЖрдкрдХреЗ рдореЙрдбрд▓ рдХреЗ рд╕рднреА рдЪрд░ рдХреЛ рдЕрд╡рд▓реЛрдХрдиреАрдп рдмрдирд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЪрд▓рд┐рдП
CounterModel
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
@Composable fun Counter(counterModel: CounterModel) { Column { CounterHeader(counterModel) AddSubtractButtons(counterModel) CounterLabel(counterModel) } } @Composable fun CounterHeader(counterModel: CounterModel) { Text(text = counterModel.header) } @Composable fun AddSubtractButtons(counterModel: CounterModel) { Button( text = "Add", onClick = { counterModel.add() }) Button( text = "Subtract", onClick = { counterModel.subtract() }) } @Composable fun CounterLabel(counterModel: CounterModel) { Text(text = "Clicks: ${counterModel.counter}") }
рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдЬреЗрдЯ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкрд┐рдирд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЕрдм рдХрдИ рдЫреЛрдЯреЗ рдХрдВрдкреЛрдЬрд┐рдЯ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред
CounterModel
рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛
add()
рдпрд╛
subtract()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред
рдФрд░ рдХреЛрдИ рджреГрд╢реНрдп рдирд╣реАрдВ
рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬреЗрдЯрдкреИрдХ рдХрдореНрдкреЛрдЬрд╝ рд╡рд┐рдЧреЗрдЯреНрд╕ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рджреГрд╢реНрдп рдпрд╛ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпреЗ рд╕рд┐рд░реНрдл рдХреИрдирд╡рд╛рд╕ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рд╣реИрдВред
@Composable
рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд▓рдЧрдЗрди
@Composable
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпреВрдЖрдИ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ
Divider
рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдХ
Padding
рд╡рд┐рдЬреЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ
DrawFillRect
рд╡рд┐рдЬреЗрдЯ рд╣реЛрддрд╛ рд╣реИред
DrawFillRect
рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ
DrawFillRect
, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╕реАрдзреЗ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд░реЗрдЦрд╛рдПрдБ рдЦреАрдВрдЪрддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рд╡рд┐рдЬреЗрдЯ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
@Composable private fun DrawFillRect(brush: Brush) { Draw { canvas, parentSize -> val paint = Paint() brush.applyBrush(paint) canvas.drawRect(parentSize.toRect(), paint) } }
рдбрд┐рд╡рд╛рдЗрдбрд░ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреНрд░рд╛рдлрд┐рд▓рд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдбред
рдпрджрд┐ рд╣рдо Google рд╕реЗ рдирдореВрдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ рд▓реЗрдЖрдЙрдЯ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдВрдкреЛрдЬ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ
View
рдпрд╛
ViewGroups
ред рд╣рдо рдПрдХ
CraneWrapper
рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреЛрдб рдореЗрдВ рдмрдирд╛рдП рдЧрдП
CraneWrapper
рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рд╕реЗ рдХрдВрдкреЛрдЬ рдпреВрдЖрдИ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рд▓реЗрдЖрдЙрдЯ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдиреЗ Jetpack Compose рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛редрд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрд░реНрде рдпрд╣ рднреА рд╣реИ рдХрд┐ Jetpack Compose рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
android.widget.Button
, рдФрд░ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕рднреА рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкрдВрджрди, рдЬреЛ рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрдбрд╝реА рдореЗрд╣рдирдд рд╣реИред рдпрд╣ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЗрдЯрдкреИрдХ рдХрдореНрдкреЛрдЬ рдХреЛ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╕рднреА рддрддреНрд╡ рд╡рд┐рдЬреЗрдЯ рд╣реИрдВред
рдлрд╝реНрд▓рдЯрд░ рдХреА рддрд░рд╣ рд╣реА, рдХрдореНрдкреЛрдЬрд╝ рдореЗрдВ рд╕рднреА рддрддреНрд╡ рд╡рд┐рдЬреЗрдЯ рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд┐рдЬреЗрдЯреНрд╕ рд╕реНрдкрд╖реНрдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдЯреВрдЯ рдЧрдП рдереЗред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреИрдбрд┐рдВрдЧ, рд╕реНрдкреЗрд╕рд░реНрд╕ рдФрд░ рдЗрддрдиреЗ рд╣реА рд╡рд┐рдЬреЗрдЯ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдмрдЯрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдкреИрдбрд┐рдВрдЧ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ:
Padding(padding = 16.dp) { Button(text = "Say hello", onClick = { ... }) }
рдХреЛрдб рдХреЛ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рдирд╛
UI рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдЯрд▓рд┐рди рдХреЛрдб рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ рдпрд╛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рддреЛ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
Column { listOf("John", "Julia", "Alice", "Mark").forEach { Text(text = it) } }
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрддрд░ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддрд░реНрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдкрдиреЗ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд
рдХрдореНрдкреЛрдЬрд╝ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХреЗрдВ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдкрдиреЗ UI рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрдХ рдирдП рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП Jetpack Compose UI рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЖрдк
GenerateView
рд╡реНрдпреВ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ XML рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдХрдВрдкреЛрдЬрд╝ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@Composable @GenerateView fun Greeting(name: String) { }
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВ рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдЦреБрд╢ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдврд╝рддреЗ рдХрд╖реНрдЯ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдкрд╖реНрдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рднреА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред
рдХрдВрдкреЛрдЬрд╝ рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░рдирд╛ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдПрдХ рдпрд╛ рджреЛ рд╕рд╛рд▓ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдЯрдкреИрдХ рдХрдореНрдкреЛрдЬрд╝ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордп рд╣реИред рдирд┐рд░реНрдорд╛рддрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЖрдк рдЕрднреА рднреА рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рд╕рдореАрдХреНрд╖рд╛рдПрдВ рдЗрд╕ рдирдП рдврд╛рдВрдЪреЗ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреАред
рдореЗрд░реА
рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреЗрдЯрдкреИрдХ рдХрдВрдкреЛрдЬрд╝ рдХрд░реЗрдВ рдЖрдЬ рдХрд╛ рдЖрд░реНрдЯрд┐рдХрд▓ рдЬрд╛рдиреЗрдВ рдХрд┐ рдХрдВрдкреЛрдЬрд╝ рдкреНрд░реА-рдЕрд▓реНрдлрд╛ рдХреЛ рдХреИрд╕реЗ рд╣реБрдХ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Google I / O рдХреЗ рд╕рд╛рде
рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рдЬрдм рдореИрдВ рдЕрд╕рд▓реА рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдореНрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрдВрддрдЬрд╛рд░ рд╣реИ!
рд╡рд╣ рд╕рдм рд╣реИред рд╣рдо рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВ рдФрд░ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд╣реИ!