
рд╣рд░ Android рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╡реИрд╕реЗ рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдерд╛ред рдХреЛрдИ рдЙрдирдХреЗ рд╕рд╛рде рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рдХреЛ рдХреЗрд╡рд▓ рд╕рддрд╣реА рдЬреНрдЮрд╛рди рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдбрд╛рд░реНрдХ рдереАрдо рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдереАрдо рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА:
- рдПрдВрдбреНрд░реЙрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ;
- рдЪрд▓реЛ рд╕рд╛рдордЧреНрд░реА рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рд╡рд┐рд╖рдп рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ;
- рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
- рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рддреИрдпрд╛рд░ рдХрд░реЗрдВред
рдЖрдЗрдП рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ
рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЖрдо рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
<style name="MyStyleOrTheme"> <item name="key">value</item> </style>
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, style
рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рд╢реИрд▓реА рдХрд╛ рдПрдХ рдирд╛рдо рд╣реИ рдФрд░ рдпрд╣ key-value
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╖рдп рдФрд░ рд╢реИрд▓реА рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
рдлрд░реНрдХ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рд╖рдп
рдПрдХ рдереАрдо рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдЧрддрд┐рд╡рд┐рдзрд┐ рдпрд╛ рджреГрд╢реНрдп рдШрдЯрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореВрд▓ рд░рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпреЛрдВред
рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╖рдп:
<style name="Theme.MyApp.Main" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="colorPrimary">@color/color_primary</item> <item name="colorPrimaryVariant">@color/color_primary_variant</item> <item name="colorSecondary">@color/color_secondary</item> <item name="colorOnPrimary">@color/color_on_primary</item> <item name="colorOnError">@color/color_on_error</item> <item name="textAppearanceHeadline1">@style/TextAppearance.MyTheme.Headline1</item> <item name="bottomSheetDialogTheme">@style/ThemeOverlay.MyTheme.BottomSheetDialog</item> <item name="chipStyle">@style/Widget.MaterialComponents.Chip.Action</item> <item name="textInputStyle">@style/Widget.MaterialComponents.TextInputLayout.FilledBox</item> <item name="android:windowTranslucentStatus">true</item> </style>
рд╡рд┐рд╖рдп рдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рд░рдВрдЧреЛрдВ ( colorPrimary
, colorSecondary
), рдкрд╛рда рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА ( textAppearanceHeadline1
) рдФрд░ рдХреБрдЫ рдорд╛рдирдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкрд╛рд░рджрд░реНрд╢реА рд╕реНрдерд┐рддрд┐ рдкрдЯреНрдЯреА рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╖рдп рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╖рдп рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред
рд╢реИрд▓реА
рдПрдХ рд╢реИрд▓реА рдПрдХрд▓ рджреГрд╢реНрдп рдШрдЯрдХ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред
TextInputLayout рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рд╢реИрд▓реА:
<style name="Widget.MyApp.CustomTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox"> <item name="boxBackgroundMode">outline</item> <item name="boxStrokeColor">@color/color_primary</item> <item name="shapeAppearanceOverlay">@style/MyShapeAppearanceOverlay</item> </style>
рдЧреБрдг
рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рд╢реИрд▓реА рдпрд╛ рд╡рд┐рд╖рдп рдХреБрдВрдЬреА рд╣реИред рдпреЗ рдЫреЛрдЯреА рдИрдВрдЯреЗрдВ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рд╕рдм рдХреБрдЫ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
colorPrimary colorSecondary colorOnError boxBackgroundMod boxStrokeColor shapeAppearanceOverlay ...
рдпреЗ рд╕рднреА рдХреБрдВрдЬрд┐рдпрд╛рдБ рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВред
рд╣рдо рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
<attr name="myFavoriteColor" format="color|reference" />
myFavoriteColor
рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рд░рдВрдЧ рдпрд╛ рд░рдВрдЧ рд╕рдВрд╕рд╛рдзрди рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧреАред
рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рд╣рдо рдХрд╛рдлреА рдорд╛рдирдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рд░рдВрдЧ
- рд╕рдВрджрд░реНрдн
- рддрд╛рд░
- enum
- рдЕрдВрд╢
- рдЖрдпрд╛рдо
- рдмреВрд▓рд┐рдпрди
- рдЭрдВрдбреЗ
- рдирд╛рд╡
- рдкреВрд░реНрдгрд╛рдВрдХ
рдЗрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ, рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ ред рдЗрд╕реЗ рд╡рд┐рд╖рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
<style name="Theme.MyApp.Main" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="myFavoriteColor">@color/color_favorite</item> </style>
рдЕрдм рд╣рдо рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкреАрд▓ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

1 тАФ , ; 2 тАФ namespace ( Material Components Library); 3 тАФ , (); 4 тАФ .
рдареАрдХ рд╣реИ, рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реАрд▓реНрдб рдХрд╛ рдкрд╛рда рд░рдВрдЧ:
<androidx.appcompat.widget.AppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="?attr/myFavoriteColor"/>
рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдореВрд░реНрдд рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╖рдп рдХреЗ рдЕрдВрджрд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд
OOP рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдкрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:
- рд╕реНрдкрд╖реНрдЯ (рд╕реНрдкрд╖реНрдЯ)
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ)
рд╕реНрдкрд╖реНрдЯ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рд╣рдо parent
рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрднрд┐рднрд╛рд╡рдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
<style name="SnackbarStyle" parent="Widget.MaterialComponents.Snackbar"> </style>
рдирд┐рд╣рд┐рдд рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрднрд┐рднрд╛рд╡рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dot-notation
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
<style name="SnackbarStyle.Green"> </style>
рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдХрд╛рдо рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ ред
рдмрд╣реБрдд рдмрд╛рд░ рд╣рдо рд╕рдорд╛рди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<style name="Widget.MyApp.Snackbar" parent="Widget.MaterialComponents.Snackbar"> </style>
рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╢реИрд▓реА рджреЛрд╣рд░реА рд╡рд┐рд░рд╛рд╕рдд рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдирд┐рд╖рд┐рджреНрдз рд╣реИред рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ, рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд░рд╛рд╕рдд рд╣рдореЗрд╢рд╛ рдЬреАрддрддреА рд╣реИ ред
рдпрд╛рдиреА, Widget.MyApp.Snackbar
рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯрд╛рдЗрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ Widget.MyApp.Snackbar
рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИред
ThemeOverlay
ThemeOverlay - рдпреЗ рд╡рд┐рд╢реЗрд╖ "рд╣рд▓реНрдХреЗ" рдереАрдо рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╡реНрдпреВ-рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рдПрдХ рдорд╛рдорд▓рд╛ рд▓реЗрдВрдЧреЗред рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдорд╛рдирдХ рд▓реЙрдЧрд┐рди рдлрд╝реАрд▓реНрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд░рдВрдЧ рдореБрдЦреНрдп рд╢реИрд▓реА рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде, рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдЬрд╛рдЗрдирд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдореИрджрд╛рди рднреВрд░реЗ рд░рдВрдЧ рдХреА рд╢реИрд▓реА рдореЗрдВ рд╣реИред
рдареАрдХ рд╣реИ, рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╢реИрд▓реА рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ?
рд╣рд╛рдВ, рд╣рдо рд╢реИрд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рдХреЗ рдореБрдЦреНрдп рд░рдВрдЧ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╣реЛрдВрдЧреЗ, рдФрд░ рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗред
рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдФрд░ рдХрд╕реНрдЯрдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд┐рдЦреЗрдВ?
рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк, рдЗрд╕рд▓рд┐рдП рд╣рдо рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкрдВрдк рдХреМрд╢рд▓, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рд╢реНрд░рдорд╕рд╛рдзреНрдп рд╣реИ рдФрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рдХреАрдбрд╝реЗ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рд╖рдп рдореЗрдВ рдореБрдЦреНрдп рд░рдВрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ?
рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдореЗрдВ рдЬрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╕ рд╡рд┐рд╖рдп рдореЗрдВ colorPrimary
рдХреЛ рдмрджрд▓реЗрдВред рдПрдХ рдХрд╛рдордХрд╛рдЬреА рд╡рд┐рдХрд▓реНрдк, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рд╢реЗрд╖ рдШрдЯрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рд╣реА рд╕рдорд╛рдзрд╛рди ThemeOverlay рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ред
ThemeOverlay
рдмрдирд╛рдПрдВ рдФрд░ рдереАрдо рдХреЗ рдореБрдЦреНрдп рд░рдВрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
<style name="ThemeOverlay.MyApp.Login" parent="ThemeOverlay.MaterialComponents.TextInputEditText"> <item name="colorPrimary">@color/colorBrown</item> </style>
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ TextInputLayout
рдореЗрдВ рд╡рд┐рд╢реЗрд╖ android:theme
рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
<com.google.android.material.textfield.TextInputLayout android:theme="@style/ThemeOverlay.MyApp.Login" android:hint="Login" ... > <com.google.android.material.textfield.TextInputEditText ... /> </com.google.android.material.textfield.TextInputLayout>
рд╣рдорд╛рд░реА рдЬрд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдмреЗрд╢рдХ, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдпрд╣ рд╣реБрдб рдХреЗ рддрд╣рдд рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдпрд╣ рдЬрд╛рджреВ рдЖрдкрдХреЛ ContextThemeWrapper
рдХреЛ рдХреНрд░реИрдВрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред LayoutInflater
рдореЗрдВ рдПрдХ рджреГрд╢реНрдп LayoutInflater
, рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рд╡рд┐рд╖рдп рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдУрд╡рд░рд▓реЗ рдереАрдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрд╕рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
../LayoutInflater.java final TypedArray ta = context.obtainStyledAttributes(attrs, ATTRS_THEME); final int themeResId = ta.getResourceId(0, 0); if (themeResId != 0) { context = new ContextThemeWrapper(context, themeResId); } ta.recycle();
рдЗрд╕реА рддрд░рд╣, рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рд╖рдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рджреГрд╢реНрдп рдШрдЯрдХ рдкрд░ рдереАрдо рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреНрд░рдо

рдореБрдЦреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╛рд░реНрдХрдЕрдк рдлрд╛рдЗрд▓ рд╣реИред рдпрджрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рднреА рд╕рдорд╛рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
<Button android:textColor="@color/colorRed" ... />
рдЕрдЧрд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреГрд╢реНрдп рд╢реИрд▓реА рд╣реИ:
<Button style=тАЬ@Widget.MyApp.ButtonStyle" ... />
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
<style name="Theme.MyApp.Main" parent="Theme..."> <item name=тАЬmaterialButtonStyleтАЭ>@Widget.MyApp.ButtonStyle</item> </style>
рдпрджрд┐ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдереАрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
<style name="Theme.MyApp.Main" parent="Theme..."> <item name=тАЬcolorPrimaryтАЭ>@colorPrimary</item> </style>
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдЕрдкрдбреЗрдЯреЗрдб рдореИрдЯреЗрд░рд┐рдпрд▓ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рд╕рд╛рдордЧреНрд░реА рдШрдЯрдХ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рд╛рдордЧреНрд░реА рдШрдЯрдХреЛрдВ рдХреЛ Google I / O 2018 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдкреЛрд░реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдореЗрдВ рдордЯреАрд░рд┐рдпрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди 2.0 рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдЙрдЬреНрдЬреНрд╡рд▓ рдФрд░ рдЕрджреНрд╡рд┐рддреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдирдИ рд╢реИрд▓реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ: рдЙрд▓реНрд▓реВ , рдЙрддреНрддрд░ , рдХреНрд░реЗрди ред
рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ
рд╡рд┐рд╖рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрдзрд╛рд░ рд╡рд┐рд╖рдп рд╕реЗ рд╡рд╛рд░рд┐рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
Theme.MaterialComponents Theme.MaterialComponents.NoActionBar Theme.MaterialComponents.Light Theme.MaterialComponents.Light.NoActionBar Theme.MaterialComponents.Light.DarkActionBar Theme.MaterialComponents.DayNight Theme.MaterialComponents.DayNight.NoActionBar Theme.MaterialComponents.DayNight.DarkActionBar
рдпреЗ рд╕рднреА AppCompat
рдереАрдо рд╕реЗ рдмрд╣реБрдд рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред
рдЖрдк material.io рдкрд░ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк рдЕрднреА рдХрд┐рд╕реА рдирдП рд╡рд┐рд╖рдп рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ Bridge
рдереАрдо рдХрд░реЗрдВрдЧреЗред рд╡реЗ AppCompat
рд╡рд┐рд╖рдпреЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рднреА рдирдИ рд╕рд╛рдордЧреНрд░реА рдШрдЯрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ Bridge
рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдбрд░ рдХреЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Theme.MaterialComponents.Light.Bridge
рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рд╡рд┐рд╖рдп рд╣реИ:
<style name="Theme.MyApp.Main" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="colorPrimary">@color/color_primary</item> <item name="colorPrimaryVariant">@color/color_primary_variant</item> <item name="colorSecondary">@color/color_secondary</item> <item name="colorSecondaryVariant">@color/color_secondary_variant</item> <style>
рдкреНрд░рд╛рдердорд┐рдХ рд░рдВрдЧреЛрдВ (рдмреНрд░рд╛рдВрдб-рд░рдВрдЧ) рдХреЗ рдирд╛рдо рдмрджрд▓ рдЧрдП рд╣реИрдВ:
colorPrimary тАФ ( AppCompat); colorPrimaryVariant тАФ ( colorPrimaryDark AppCompat); colorSecondary тАФ ( colorAccent AppCompat); colorSecondaryVariant тАФ .
рд░рдВрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА material.io рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╖рдп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╢реИрд▓рд┐рдпрд╛рдБ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, snackbarStyle
Snackbar
рд╢реИрд▓реА рдХреЛ snackbarStyle
рд╕реНрдЯрд╛рдЗрд▓ рдХрд╣рд╛ snackbarStyle
, checkbox
- checkboxStyle
рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдкрдиреА рдЬрдЧрд╣ рдкрд░ рд╕рдм рдХреБрдЫ рдбрд╛рд▓ рджреЗрдЧрд╛:

рдЕрдкрдиреА рдЦреБрдж рдХреА рд╢реИрд▓реА рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рд╖рдп рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
<style name="Theme.MyApp.Main" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="snackbarStyle">@style/Widget.MyApp.SnackbarStyle</item> </style> <style name="Widget.MyApp.SnackbarStyle" parent="Widget.MaterialComponents.Snackbar"> </style>
рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╖рдп рдореЗрдВ рд╢реИрд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЧрддрд┐рд╡рд┐рдзрд┐) рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рджреГрд╢реНрдп рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк рд╢реИрд▓реА рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдореЗрдВ style
рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<com.google.android.material.button.MaterialButton style="@style/Widget.MyApp.SnackbarStyle" ... />
рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рд╖рдп рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ!
рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдШрдЯрдХ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:
рд╢реЗрдкрдкрд┐рдпрд░реЗрдВрд╕ рдЫреЛрдЯреЗ рдШрдЯрдХ
shapeAppearance рдордзреНрдпрдо рдШрдЯрдХ
рдЖрдХрд╛рд░- рдмрдбрд╝реЗ рдШрдЯрдХ
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдирд╛рдо рд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдореЗрдВред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
<style name="Theme.MyApp.Main" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="shapeAppearanceSmallComponent">@style/Widget.MyApp.SmallShapeAppearance</item> </style> <style name="Widget.MyApp.SmallShapeAppearance" parent=тАЬShapeAppearance.MaterialComponents.SmallComponentтАЭ> <item name="cornerFamilyTopLeft">rounded</item> <item name="cornerFamilyBottomRight">cut</item> <item name="cornerSizeTopLeft">20dp</item> <item name="cornerSizeBottomRight">15dp</item> </style>
рд╣рдордиреЗ "рдЫреЛрдЯреЗ" рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП Widget.MyApp.SmallShapeAppearance
рдмрдирд╛рдпрд╛ред рд╣рдордиреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдХреЛ 20dp
рдФрд░ рдирд┐рдЪрд▓реЗ рджрд╛рдПрдВ рдХреЛрдиреЗ рдХреЛ 15dp
рд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ред
рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛:

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рд╕рдордп рдмрддрд╛рдПрдЧрд╛ред
рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рджреГрд╢реНрдп рдШрдЯрдХ рдХреЗ рд▓рд┐рдП ShapeAppearance
рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдкрд░ рдХреНрдпрд╛ рд╣реИ?
рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрдпреВ рдХреА рд░рд┐рд▓реАрдЬ рдмрд╣реБрдд рдЬрд▓реНрдж рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбрд╛рд░реНрдХ рдереАрдо рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдПрдЧреАред
рд╢рд╛рдпрдж рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рд╢рд╛рдирджрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЪрд▓реЛ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЯреЗрд░рд╛рдХреЛрдХ рд╕реЗ рдПрдХ рдкрд╕рдВрджреАрджрд╛ рдЧрд┐рдЯрд▓реИрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЗрдирд╛ ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо):
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:forceDarkAllowed">true</item> </style>
android:forceDarkAllowed
API 29 (Android Q) рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИред
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рджреЗрдЦреЛ рдХреНрдпрд╛ рд╣реБрдЖ:

рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред
рдмреЗрд╢рдХ, рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ - BottomNavigationBar
рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЛрдбрд░ рд╕рдлреЗрдж рд░рд╣рддрд╛ рд╣реИ, рдХреЛрдб рдХрд╛ рдЪрдпрди рд╣реЛрддрд╛ рд╣реИ рдФрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рднреА рдЧрдВрднреАрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдорд╛рд░рд╛ рд╣реИред
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрддрдирд╛ рд╕рдордп рдЦрд░реНрдЪ рдХрд░рдиреЗ рд╕реЗ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд╛рд░реНрдХ рдореЛрдб рдХреЛ рдмрдВрдж рдХрд░рдирд╛ (рд╣рд╛рдБ, рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ - android:forceDarkAllowed
рд╡реНрдпреВ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ)ред
рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдореЛрдб рдХреЗрд╡рд▓ рд╣рд▓реНрдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдХ рдЕрдВрдзреЗрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдордЬрдмреВрд░ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдХрд╛рд░реНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдФрд░ рдЕрдЧрд░ рд╣рдо рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рджрдо рдкрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдордЬрдмреВрд░ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрд╣ рдореЛрдб рд▓рдЪреАрд▓реЗрдкрди рд╕реЗ рд░рд╣рд┐рдд рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЛ рдЕрд╕реНрдерд╛рдпреА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдПрдХ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗред
рдПрдкреАрдЖрдИ 8 (рдлреНрд░рд╛рдпреЛ) рдореЗрдВ, -night
рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдЬ рддрдХ рдПрдХ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рджрд┐рди рдХреЗ рд╕рдордп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╖рдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
DayNight
рдереАрдо рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдирд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЖрдЗрдП рд╣рдо рдЕрдкрдирд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
../values/themes.xml <style name="Theme.DayNight.Base" parent="Theme.MaterialComponents.Light"/> <style name="Theme.MyApp.Main" parent="Theme.DayNight.Base> <!-- ... --> </style> ../values-night/themes.xml <style name="Theme.DayNight.Base" parent="Theme.MaterialComponents"/>
рдереАрдо ( values/themes.xml
рдереАрдо. values/themes.xml
) рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рд╣рдо рд▓рд╛рдЗрдЯ рдереАрдо рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, "рд░рд╛рдд" ( values-night/themes.xml
рдереАрдореНрд╕ред values-night/themes.xml
) рдореЗрдВ рд╣рдо рдбрд╛рд░реНрдХ рдереАрдо рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╣ рд╕рдм рд╣реИред рд╣рдореЗрдВ рдПрдХ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдХрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛ред рдЕрдм рд╣рдореЗрдВ рджреЛ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рдереАрдо рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк AppCompatDelegate.setDefaultNightMode
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рдореНрди рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ:
MODE_NIGHT_NO
- рд▓рд╛рдЗрдЯ рдереАрдо;MODE_NIGHT_YES
- рдбрд╛рд░реНрдХ рдереАрдо;MODE_NIGHT_AUTO_BATTERY
- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдбред рдпрджрд┐ рдкрд╛рд╡рд░ рд╕реЗрд╡рд┐рдВрдЧ рдореЛрдб рд╕рдХреНрд░рд┐рдп рд╣реИ рддреЛ рдбрд╛рд░реНрдХ рдереАрдо рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ;MODE_NIGHT_FOLLOW_SYSTEM
- рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЛрдбред
рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, Google рдиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдп рдкрд░ рдмрд▓ рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрдИ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкреНрд░рд╢реНрди рдорд┐рд▓рдиреЗ рд╢реБрд░реВ рд╣реБрдП - "рдХреНрдпрд╛ рд╣рдо рдПрдХ рдбрд╛рд░реНрдХ рдереАрдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ?"ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдк рд╢реБрд░реВ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЖрд╡реЗрджрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП рд╣рд▓реНрдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рдЕрдВрдзреЗрд░реЗ рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЖрдЗрдП рдПрдХ рд╕рд╛рде рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
1. рд░рдВрдЧ рдмреАрдирдиреЗ рд╡рд╛рд▓рд╛
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдбреЗрд╡рд▓рдкрд░ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдирдП рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рд░рдВрдЧ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрд▓реЗрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рд╕рд╣реА рдЙрддреНрддрд░ рдбрд┐рдЬрд╛рдЗрдирд░ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдФрд░ рд░рдВрдЧ рдкреИрд▓реЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рдЕрдм рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо (рдЬрд╝реЗрдкрд▓рд┐рди, рд╕реНрдХреЗрдЪ, рдЖрджрд┐) рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рд░рдВрдЧреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЙрдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдЖрдк рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдкрдХреЛ рдЙрддрдиреЗ рд╣реА рдХрдо рд╕рд┐рд░рджрд░реНрдж рд╣реЛрдВрдЧреЗред
2. рдЙрдирдХреЗ рдЙрдЪрд┐рдд рдирд╛рдореЛрдВ рд╕реЗ рд░рдВрдЧ рдмрд┐рдЦреЗрд░реЗрдВ
рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдПрдХ рд░рдВрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЪрдордХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдЙрдирдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<color name="green_tiny">...</color> <color name="green_light">...</color> <color name="green_dark">...</color>
рд╕рд╣рдордд рд╣реВрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдкреНрд░рд╢реНрди рддреБрд░рдВрдд рдЙрдарддрд╛ рд╣реИ - рдХреМрди рд╕рд╛ рд░рдВрдЧ рд╣рд▓реНрдХрд╛ рдпрд╛ light
? рдФрд░ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рджрд░реНрдЬрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ?
Google рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде colorVariant
рдФрд░ рд░рдВрдЧ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЪрдордХ рдЬреЛрдбрд╝рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ (Google рдЗрд╕ рд░рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдХрд╣рддрд╛ рд╣реИ - colorVariant
):
<color name="material_green_300">...</color> <color name="material_green_700">...</color> <color name="material_green_900">...</color>
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд░рдВрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рдЪрдордХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдирд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
3. рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдВрдЧ рд╕реЗ рд╕рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ
рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╡рд┐рд╖рдп рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдВрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╣рд▓реНрдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреВрд▓рдмрд╛рд░ рдмреИрдВрдЧрдиреА рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдЕрдВрдзреЗрд░реЗ рдореЗрдВ рдпрд╣ рдЧрд╣рд░реЗ рднреВрд░реЗ рд░рдВрдЧ рдХрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╡рд┐рд╖рдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?
рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢ рдФрд░ рдЕрдВрдзреЗрд░реЗ рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
Google рдЙрдкрдпреЛрдЧ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИред
4. рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рд╕реЗ рдбрд░реЛ рдордд
рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реИрд▓рд┐рдпреЛрдВ, рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ styles.xml
рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:
themes.xml тАФ Theme & ThemeOverlay styles.xml тАФ Widget styles type.xml тАФ TextAppearance, text size etc shape.xml тАФ ShapeAppearance motion.xml тАФ Animations styles system_ui.xml тАФ Booleans, colors for UI control //may be other files
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдирд┐рдпрдо рднрдЧрд╡рд╛рди-рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдмрдЪреЗрдВрдЧреЗ рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
5. рдЕрдзрд┐рдХрддрдо рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ
рдЕрдЧрд░ рд╣рдо рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЙрдкрд▓рдмреНрдз рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?
рд╣рдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╖рдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
../values/themes.xml <style name="Theme.MyApp.Main" parent=тАЭTheme.MaterialComponents.NoActionBarтАЭ> </style> ../values-v27/themes.xml <style name="Theme.MyApp.Main" parent=тАЭTheme.MaterialComponents.NoActionBarтАЭ> <name="android:windowLightNavigationBar">...</item> </style>
рдХреНрдпрд╛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреАрдЖрдИ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдереАрдо рд╣реИ? рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ! рд╣рдо рдПрдХ рдореВрд▓ рд╡рд┐рд╖рдп рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд╣рд╛рдВ рдПрдкреАрдЖрдИ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
../values/themes.xml <style name="Theme.MyApp.Base" parent=тАЭTheme.MaterialComponents.DayNight.NoActionBarтАЭ> </style> <style name="Theme.MyApp.Main" parent=тАЭTheme.MyApp.BaseтАЭ/> ../values-v27/themes.xml <style name="Theme.MyApp.Base.V27" parent="Theme.MyApp.Base"> <name="android:windowLightNavigationBar">...</item> </style> <style name="Theme.MyApp.Main" parent=тАЭTheme.MyApp.Base.V27тАЭ/>
рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рднреА рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
6. рд╡реЗрдХреНрдЯрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдЯрд┐рдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рд╕рдВрд╕рд╛рдзрди рдЕрдЪреНрдЫреЗ рдХреНрдпреЛрдВ рд╣реИрдВред рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ (рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдбрд╝реА )ред рдЦреИрд░, рдЯрд┐рдирд┐рдВрдЧ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдереАрдо рд░рдВрдЧреЛрдВ рдореЗрдВ рд░рдВрдЧрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯрд┐рдирд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред
7.? Android: attr / ... рдмрдирд╛рдо? Attr / ...
рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рджреМрд░рд╛рди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдордЧреНрд░реА рдШрдЯрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рджреБрд░реНрдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ (рд▓рд┐рдВрдЯ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)
android:background="?android:attr/selectableItemBackgroundBorderless" android:background="?attr/selectableItemBackgroundBorderless"
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ android
рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдореЗрд╢рд╛ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред
8. рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
рдореВрд▓ рд╢реИрд▓реА рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдШрдЯрдХ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
<style name="Widget.MyApp.LoginInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox"> <item name="errorTextColor">@color/colorError</item> </style>
9. рдереАрдо, рд╕реНрдЯрд╛рдЗрд▓ рдпрд╛ ...?
рдЕрдкрдиреА рдЦреБрдж рдХреА рдереАрдо рдФрд░ рд╢реИрд▓реА рдмрдирд╛рддреЗ рд╕рдордп рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╢реИрд▓реА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд╛рдордХрд░рдг рд╕реЗ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
<style name="Theme.MyApp.Main" parent=тАЭ...тАЭ/> <style name="Widget.MyApp.LoginInputLayout" parent="..."/> <style name="Widget.MyApp.LoginInputLayout.Brown"/> <style name="ThemeOverlay.MyApp.Login" parent=тАЭ...тАЭ/>
10. TextAppearance рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдпрд╣ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реНрд╡рд░ рд╣реЛрдЧрд╛ред
Material Design: Typography , Typography Theming .
рдирд┐рд╖реНрдХрд░реНрд╖
, тАФ , . - . Material Components. . Sketch тАФ Material Theme Editor . . , .
Material Components GitHub тАФ Modular and customizable Material Design UI components for Android . . , тАФ sample, .
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ: